如何在Users表中散列管理员密码?
使用SQL Server 2008 R2
我知道PHP中内置了加密命令,但我不确定是否可以使用SQL查询。
示例:名为users的用户,输入admin,密码为sha1('password')
答案 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在评论中说,你应该以不同的方式存储你的密码,至少要腌制它们。
答案 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