2011-05-04 108 views
0

我想知道如何加密我在SQL Server 2008中的密码列。我已阅读this文章,但我仍然不知道如何...有一个更容易理解的教程?谢谢!加密SQL Server 2008中的密码列

+1

您的“本文”链接似乎已经离开了AWOL。 – 2011-05-04 18:30:58

+0

哎呀,这里去http://msdn.microsoft.com/en-us/library/ms179331.aspx – user133466 2011-05-04 18:32:30

+1

@ user133466 - 你为什么不从源应用程序存储密码散列? – Thomas 2011-05-04 18:37:19

回答

4

通常的做法是存储密码的散列。像:

HASHBYTES('SHA1', convert(varbinary(32), @password)) 

使用散列,您可以验证密码是否匹配,但您不知道密码本身。所以即使黑客获得了对数据库的完全访问权限,他仍然不知道密码。

有很多教程on the web

+2

这也是一个不错的主意盐值。随机(crytographically强)int或bigint可以很好地工作。 – Yuck 2011-05-04 18:43:56

+0

我将如何检查凭证?我通常使用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

+0

@ user133466:以与原始密码相同的方式哈希凭证。如果哈希匹配,字符串是相等的。 – Andomar 2011-05-04 19:21:40

2

您应该考虑存储密码散列而不是使用加密。如果你不了解这些差异,一个散列(也称为单向散列)会接收一个输入并产生gobbledygook(称为散列),以便为同一输入生成相同的gobbledygook。身份验证通过散列用户在客户端输入的内容并将其与db中的gobbledygook进行比较。如果它们匹配,密码是相同的。没有深入细节,哈希永远不能恢复为纯文本,这是他们的保护。然而,加密包括创建一个密码,以便如果您有解密密钥,则可以将密码恢复为纯文本。

如果您使用的是SQL Server和ASP.NET,则应该使用SqlMembershipProvider查看Forms Authentication。

Explained: Forms Authentication in ASP.NET 2.0

SqlMembershipProvider Class

An Overview of Forms Authentication

+0

这正是我们使用永不离开数据库的盐的原因。 UI哈希+ salt =数据库哈希。 – Yuck 2011-05-04 18:48:33

+0

Upvote for MembershipProvider。在我看来,你需要一个非常有说服力的理由不使用它。也为gobbledygook。 – Simon 2011-05-04 19:05:05

+0

@Simon:MembershipProvider将您绑定到ASP.NET客户端。向它添加新功能也很难。 – Andomar 2011-05-04 19:25:16