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

时间:2012-07-30 19:40:10

标签: php hash

  

可能重复:
  Secure hash and salt for PHP passwords

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

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

我们的时间安全吗?如果不是,哪种解决方案更好? crypt()对于这个目的有用还是太老了?

3 个答案:

答案 0 :(得分:2)

用盐捣蛋是好的。但是,您希望多次应用散列算法(几百个是一个很好的球场)。

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

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

答案 1 :(得分:2)

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

由于攻击者将计算数百万个哈希值,为什么不让哈希函数每个哈希值0.1s?你没有注意到任何明显的速度下降,但任何蛮力攻击都是不可行的。

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

hash = sha512(password)

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

return hash

使用phpass等经过测试的解决方案,该解决方案使用bcrypt

答案 2 :(得分:1)

这取决于你对此的使用,它不足以存储信用卡详细信息或银行详细信息(不是你会哈希它们!)但是对于一个网站的密码来说,这将是足够的IMO,特别是给出你使用的是盐,它是512哈希。