我有一个看起来像这样的数据库表(简化):
CREATE TABLE User ( ID int, UserName varchar(100), password varchar(100), primary key (ID) )
我想加密password
列.我已经研究过TDS(透明数据加密),看起来你可以在文件级加密数据库和列.
如果我使用这种方法,那么如果人们运行以下查询,他们会看到密码:
select password from [User]
该数据库在SQL Server 2012 Enterprise Edition上运行.
您可以查看此链接,它可以帮助您开始正确的方向.
尽管如此,通常的做法是存储密码本身的哈希值,而不是密码的加密版本.散列将允许您检查用户是否输入了正确的密码(通过将数据库中的哈希值与用户输入的哈希值进行比较),而无需知道实际密码是什么.
这样做的好处是它通常更简单,更安全,因为您不需要加密/解密任何值.使用散列的缺点是你永远不能向用户发送他们的密码(如果你打算提供某种'忘记我的密码'功能),而是你必须将它重置为一个新的随机密码.
public string Encrypt(string plainText) { if (plainText == null) throw new ArgumentNullException("plainText"); //encrypt data var data = Encoding.Unicode.GetBytes(plainText); byte[] encrypted = ProtectedData.Protect(data, null, Scope); //return as base64 string return Convert.ToBase64String(encrypted); } public string Decrypt(string cipher) { if (cipher == null) throw new ArgumentNullException("cipher"); //parse base64 string byte[] data = Convert.FromBase64String(cipher); //decrypt data byte[] decrypted = ProtectedData.Unprotect(data, null, Scope); return Encoding.Unicode.GetString(decrypted); }