使用LINQ加密列数据
我想知道是否有简单的解决方案或我坚持以下:
更新DB时:
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支持的合乎逻辑的事情; 所以我想知道是不是。
您可以添加一个带有封装此逻辑的属性的分部类,如:
public partial class DbTableItem { public String UnencryptedPass { get { return Crypter.Decrypt(this.Pass); } set { this.Pass = Crypter.Encrypt(value) } } }
希望能帮助到你 : )
您应该使用SQL Server加密函数, ENCRYPTBYKEY和DECRYPTBYKEY 。 更好的是,使用透明数据库加密 。 现在,您使用一些知道位置的密钥加密和解密密码。 数据库有这种讨厌的习惯,即在灾难恢复的情况下或作为各种高可用性方案的一部分在全新机器上移动和恢复,并且您将发现将加密数据存储在数据库中并将加密密钥存储在系统密钥中商店(或更糟糕的是,在应用程序中)给你留下了一堆“完全安全”的数据,因为丢失了密钥而无法解密。
您可以定义一个伪Password
属性,它封装您的密码逻辑和一个原始密码字段(映射到数据库 – 在我的示例中为PasswordInternal
)应该是例如internal
。
public partial class YourEntity { public string Password { get { return Crypter.Decrypt(this.PasswordInternal) } set { this.PasswordInternal = Crypter.Encrypt(value) } } }
AFAIK,没有您正在寻找的内置function。