SHA512哈希和随机盐密码是否安全


Is SHA512 hash and random salt secure for passwords?

可能重复:
PHP密码的安全散列和salt

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

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

在我们这个时代安全吗?如果没有,什么解决方案更好?crypt()是适合这个用途还是太旧了?

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

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

话虽如此,与其出去写自己的哈希函数来做这件事:

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

使用经过测试的解决方案,如使用bcryptphpass

用盐哈希是很好的。但是,您需要多次应用哈希算法(几百次是一个不错的近似值)。

以这种方式"拉伸"散列函数并不会产生更强的散列,反而会减缓暴力攻击。

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

这取决于你对它的使用,它不足以存储信用卡详细信息或银行详细信息(并不是说你会对它们进行散列!),但对于网站的密码来说,它将绰绰有余,尤其是考虑到你使用的是salt,它是512散列。