加密SQL Server 2008中的密码列
通常的做法是存储密码的散列。像:
HASHBYTES('SHA1', convert(varbinary(32), @password))
使用散列,您可以验证密码是否匹配,但您不知道密码本身。所以即使黑客获得了对数据库的完全访问权限,他仍然不知道密码。
有很多教程on the web。
这也是一个不错的主意盐值。随机(crytographically强)int或bigint可以很好地工作。 – Yuck 2011-05-04 18:43:56
我将如何检查凭证?我通常使用If ProfileDataset.Tables(“RO_User”)。Rows.Count = 1和strPassword.ToString ProfileDataset.Tables(“RO_User”)。行(0).Item(“User_psw”)。ToString Then ...但现在没有地方让我放置哈希函数 – user133466 2011-05-04 19:01:00
@ user133466:以与原始密码相同的方式哈希凭证。如果哈希匹配,字符串是相等的。 – Andomar 2011-05-04 19:21:40
您应该考虑存储密码散列而不是使用加密。如果你不了解这些差异,一个散列(也称为单向散列)会接收一个输入并产生gobbledygook(称为散列),以便为同一输入生成相同的gobbledygook。身份验证通过散列用户在客户端输入的内容并将其与db中的gobbledygook进行比较。如果它们匹配,密码是相同的。没有深入细节,哈希永远不能恢复为纯文本,这是他们的保护。然而,加密包括创建一个密码,以便如果您有解密密钥,则可以将密码恢复为纯文本。
如果您使用的是SQL Server和ASP.NET,则应该使用SqlMembershipProvider查看Forms Authentication。
微软做出这个超级容易与没好气命名
FormsAuthentication.HashPasswordForStoringInConfigFile
。
http://www.adventuresindevelopment.com/2009/05/23/a-simple-way-to-hash-passwords-in-aspnet/
您的“本文”链接似乎已经离开了AWOL。 – 2011-05-04 18:30:58
哎呀,这里去http://msdn.microsoft.com/en-us/library/ms179331.aspx – user133466 2011-05-04 18:32:30
@ user133466 - 你为什么不从源应用程序存储密码散列? – Thomas 2011-05-04 18:37:19