如何在我的用户表中散列管理员密码?
使用 SQL Server 2008 R2
我知道 PHP 中内置了一个加密命令,但我不确定这是否可以使用 SQL 查询。
示例:名为 users 的表,输入为 admin,密码为sha1('password')
如何在我的用户表中散列管理员密码?
使用 SQL Server 2008 R2
我知道 PHP 中内置了一个加密命令,但我不确定这是否可以使用 SQL 查询。
示例:名为 users 的表,输入为 admin,密码为sha1('password')
请注意,以上都不是存储密码哈希的好方法。使用 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
使用HASHBYTES
并指定SHA1
为算法。例子:
SELECT HASHBYTES('SHA1', @password);
编辑:正如 Siva 在评论中所说,你真的应该以不同的方式存储你的密码,并且至少对它们加盐。
请参阅此处:在数据库中存储密码的首选方法
加密和散列是有区别的。加密通常使用密码翻译纯文本,并且可以反转为原始输入,如果哈希不能反转为原始输入。
对于您的查询,您应该使用以下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