可能重复:
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不再安全,而且多次散列密码只会给服务器带来太多压力而不实用效益。这是对的吗?
答案 0 :(得分:2)
文章的直接引用不起作用,因为PHP中没有md4()
函数。然后它仍然没有意义。
通常应用多个散列函数不会有害。但是当你从sha1
转到md5
时,输入范围会丢失(md5会输出128位,但sha1的长度为160位)。这是一个缩短的摘录,这意味着可能的输出集永远不会大于md5()
的输出集。
答案 1 :(得分:1)
还有许多其他方法可以提高安全性,其中最基本的方法是使用某种随密码一起存储的随机盐。
答案 2 :(得分:1)
保护密码可以做的最好的事情是1)使用sha256或更高版本的hash_hmac 2)每个用户使用一个随机的nonce并将其存储在db中3)使用每个用户的随机迭代计数并将其存储在db也是。
答案 3 :(得分:1)
如果你没有将密码哈希数万次,你就不知道自己在做什么。
计算成本高昂;这就是重点。为了验证具有正确密码的用户的合法目的,负载可以忽略不计。但对于试图在离线攻击中测试大量密码的黑客来说,成本太高了。
使用数千次哈希函数迭代是一种成熟且广泛使用的“密钥加强”技术。它被包含在密钥派生的标准中,并用于像bcrypt这样的算法中用于密码保护。
使用bcrypt或PBKDF2,这将要求您使用salt和迭代。不要尝试使用一些破碎的哈希来构建自己的方法。