3

如何在我的用户表中散列管理员密码?

使用 SQL Server 2008 R2

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

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

4

3 回答 3

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

于 2012-08-17T21:24:16.860 回答
1

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

SELECT HASHBYTES('SHA1', @password);

编辑:正如 Siva 在评论中所说,你真的应该以不同的方式存储你的密码,并且至少对它们加盐。

请参阅此处:在数据库中存储密码的首选方法

于 2012-04-30T15:18:07.907 回答
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

于 2012-04-30T15:27:38.513 回答