使用LINQ加密列数据

时间:2010-05-19 18:10:10

标签: c# asp.net sql-server linq linq-to-sql

我想知道是否有简单的解决方案或者我坚持以下:

更新数据库时:

dti.Pass = Crypter.Encrypt(dti.Pass);
_db.SubmitChanges();

从DB中选择时:

Data.DbTableItem dti = _db.Single(a=>a.Id == id);
dti.Pass = Crypter.Decrypt(dti.Pass);

意义 - 我并不是真的在编写重复代码,这似乎是LINQ支持的逻辑事物;所以我想知道是不是。

3 个答案:

答案 0 :(得分:6)

您可以添加一个带有封装此逻辑的属性的分部类,如:

public partial class DbTableItem
{
  public String UnencryptedPass
  {
    get
    {
       return  Crypter.Decrypt(this.Pass);
    }

    set
    {
       this.Pass = Crypter.Encrypt(value)
    }
  }
}

希望有所帮助:)

答案 1 :(得分:4)

您可以定义一个假的Password属性,它封装了您的密码逻辑,并且原始密码字段(映射到数据库 - 我的示例中为PasswordInternal)应该是例如internal

public partial class YourEntity
{
   public string Password
   {
        get
        {
            return Crypter.Decrypt(this.PasswordInternal)
        }
        set
        {
            this.PasswordInternal = Crypter.Encrypt(value)
        }
   }
}

AFAIK,没有您正在寻找的内置功能。<​​/ p>

答案 2 :(得分:4)

您应该使用SQL Server加密函数ENCRYPTBYKEYDECRYPTBYKEY。更妙的是,使用Transparent Database Encryption。现在你用一些知道在哪里的密钥加密和解密密码。数据库有这种讨厌的习惯,即在灾难恢复的情况下或作为各种高可用性场景的一部分在全新机器上移动和恢复,您将发现将加密数据存储在数据库中并将加密密钥存储在系统密钥中商店(或更糟糕的是,在应用程序中)给你留下了一堆“完全安全”的数据,因为丢失了密钥而无法解密。