如何在Users表中散列管理员密码?

时间:2012-04-30 15:11:08

标签: sql sql-server sql-server-2008

如何在Users表中散列管理员密码?

使用SQL Server 2008 R2

我知道PHP中内置了加密命令,但我不确定是否可以使用SQL查询。

示例:名为users的用户,输入admin,密码为sha1('password')

3 个答案:

答案 0 :(得分:2)

请注意,以上都不是存储密码哈希的好方法。使用PBKDF2(PKCS#5,RFC2898)多次哈希盐渍密码(OWASP推荐2012年64,000次,每2年翻一番)。理想情况下,将其散列可变次数,并与随机的每用户盐一起存储。

更好的是,针对已知错误密码列表反弹建议的密码,理想情况下已经应用了基本破解规则(1337说翻译),因此不允许使用“P @ $$ w0rd”。

请参阅OWASP密码存储备忘单:https://www.owasp.org/index.php?title=Password_Storage_Cheat_Sheet&setlang=es

答案 1 :(得分:1)

使用HASHBYTES并指定SHA1作为算法。例如:

SELECT HASHBYTES('SHA1', @password);

编辑,因为Siva在评论中说,你应该以不同的方式存储你的密码,至少要腌制它们。

见这里:Preferred Method of Storing Passwords In Database

答案 2 :(得分:1)

加密和散列之间存在差异。加密通常使用密码翻译纯文本,并且可以反转为原始输入,如果哈希不能反转为原始输入。

对于您的查询,您应该使用HASHBYTES功能:

DECLARE @YourInput nvarchar(4000);
SELECT @YourInput = CONVERT(nvarchar(4000),'dslfdkjLK85kldhnv$n000#knf');
SELECT HASHBYTES('SHA1', @YourInput);

如果您使用的是SQL Server 2012,则可以使用:

SELECT HASHBYTES('SHA_256', @YourInput); // SHA 256 or SHA_512

http://msdn.microsoft.com/en-us/library/ms174415.aspx