多次加密密码真的能让它更安全吗?

时间:2011-12-23 00:03:32

标签: php security

  

可能重复:
  Is “double hashing” a password less secure than just hashing it once?

所以,我正在阅读一篇关于保护PHP网站的文章,他们建议多次散列密码,事实上,这是文章的直接引用:

md4(md4(md5(sha1(md4(md5(sha1(sha1($_POST['password']))))))));

现在,就我个人而言,我通常在我的密码上使用盐渍SHA-256哈希,因为我认为MD4和MD5不再安全,而且多次散列密码只会给服务器带来太多压力而不实用效益。这是对的吗?

4 个答案:

答案 0 :(得分:2)

文章的直接引用不起作用,因为PHP中没有md4()函数。然后它仍然没有意义。

通常应用多个散列函数不会有害。但是当你从sha1转到md5时,输入范围会丢失(md5会输出128位,但sha1的长度为160位)。这是一个缩短的摘录,这意味着可能的输出集永远不会大于md5()的输出集。

答案 1 :(得分:1)

有点儿。如果目标是实际获得原始密码,那么这将成为一项不可能完成的任务。但是,通常它不是,如果你真的使用md4作为最外面的哈希,那么...... http://en.wikipedia.org/wiki/MD4#Security

还有许多其他方法可以提高安全性,其中最基本的方法是使用某种随密码一起存储的随机盐。

答案 2 :(得分:1)

保护密码可以做的最好的事情是1)使用sha256或更高版本的hash_hmac 2)每个用户使用一个随机的nonce并将其存储在db中3)使用每个用户的随机迭代计数并将其存储在db也是。

您还应该阅读:Secure hash and salt for PHP passwords

答案 3 :(得分:1)

如果你没有将密码哈希数万次,你就不知道自己在做什么。

计算成本高昂;这就是重点。为了验证具有正确密码的用户的合法目的,负载可以忽略不计。但对于试图在离线攻击中测试大量密码的黑客来说,成本太高了。

使用数千次哈希函数迭代是一种成熟且广泛使用的“密钥加强”技术。它被包含在密钥派生的标准中,并用于像bcrypt这样的算法中用于密码保护。

使用bcrypt或PBKDF2,这将要求您使用salt和迭代。不要尝试使用一些破碎的哈希来构建自己的方法。