Boo*_*man 7 sql-server encryption sql-server-2008
我在SQL Server 2008 r2中有用户表.什么都没有加密,但我想至少加密密码,直到应用程序准备好,将更好地处理这个.我可以这样做吗?手动使密码加密.
Rus*_*ell 10
您可以使用SQL Server加密列(请参阅:http://msdn.microsoft.com/en-us/library/ms179331.aspx进行演练).
您还可以使用从服务器本身发出的密钥.
使用它的风险是,如果您必须进行数据恢复并将数据库移动到其他服务器,则无法解密该列(需要重置密码).
注意:密码哈希不适用于双向加密(流氓dba可以解密它).它用于以允许验证的方式对其进行散列,而无需向任何人轻易显示密码.低水平甚至中等水平的冲突在某些方面是可取的,因此它允许密码通过(并且不幸的是其他变体)但是通过冲突你永远无法分辨出真正的密码究竟是什么.
INSERT INTO <tbl> (..., passwd) values (...., HashBytes('SHA1', @password))
Run Code Online (Sandbox Code Playgroud)
验证密码时,您将获取密码的哈希值
SELECT HashBytes('SHA1', @password);
Run Code Online (Sandbox Code Playgroud)
并将其与输入进行比较.
JAi*_*iro -5
如果您的唯一任务是验证用户输入的密码是否正确,则不应加密密码。你应该对它们进行哈希处理。您可以使用任何算法对它们进行哈希处理,但我建议使用 MD5,因为它非常安全。1 :)
例如:
public string EncodePassword(string originalPassword)
{
//Declarations
Byte[] originalBytes;
Byte[] encodedBytes;
MD5 md5;
//Instantiate MD5CryptoServiceProvider, get bytes for original password and compute hash (encoded password)
md5 = new MD5CryptoServiceProvider();
originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword);
encodedBytes = md5.ComputeHash(originalBytes);
//Convert encoded bytes back to a 'readable' string
return BitConverter.ToString(encodedBytes);
}
Run Code Online (Sandbox Code Playgroud)
1编辑(非原始答案作者):密码的 MD5 被认为是不安全的,应使用更强大的算法。在阅读本文时,您应该研究当代算法。这篇文章可能是一个很好的起点。