2

可能重复:
PHP 密码的安全哈希和盐

我使用以下代码来散列和存储密码:

$salt=uniqid(mt_rand(), false);
hash('sha512',$pass+$salt);

在我们这个时代安全吗?如果不是,什么解决方案更好?crypt()对这个目的有好处还是太旧了?

4

3 回答 3

2

为了使您的哈希更难暴力破解,请增加计算时间。sha512是一个密码散列函数,它针对速度进行了优化。在对用户进行身份验证时,您只需对密码进行一次哈希处理,因此不要害怕花时间。

既然攻击者会计算数百万个哈希值,为什么不让你的哈希函数取0.1s每个哈希值呢?您不会注意到任何显着的速度下降,但任何蛮力攻击都将是无效的。

话虽这么说,而不是出去编写自己的哈希函数来执行此操作:

hash = sha512(password)

for i in range(10000):
  hash = sha512(hash) + salt

return hash

使用经过测试的解决方案phpass,例如使用bcrypt.

于 2012-07-30T20:00:17.063 回答
2

用盐散列是好的。但是,您想多次应用散列算法(几百个是一个不错的选择)。

以这种方式“拉伸”散列函数不会产生更强的散列,而是减缓蛮力攻击。

http://en.wikipedia.org/wiki/Key_stretching#Hash_based_key_stretching

于 2012-07-30T19:42:35.000 回答
1

这取决于你对它的使用,它不足以存储信用卡详细信息或银行详细信息(不是你会散列它们!)但对于网站密码来说,IMO 已经足够了,特别是考虑到你正在使用一个盐,它是 512 哈希。

于 2012-07-30T19:42:57.423 回答