将密码在存储前进行两次哈希,与仅进行一次哈希相比,哪种更安全?
我所说的是这样做:
$hashed_password = hash(hash($plaintext_password));
而不仅仅是这样:
$hashed_password = hash($plaintext_password);
如果安全性较低,你能提供一个好的解释(或链接)吗?
另外,使用的哈希函数是否有所不同?如果混合使用md5和sha1(例如),而不是重复相同的哈希函数,是否会有所不同?
注意1:当我说“双重哈希”时,我指的是尝试两次哈希密码以使其更加模糊。我不是在谈论解决冲突的技术。
注意2:我知道我需要添加一个随机盐来确保安全。问题是使用相同算法两次哈希是否有帮助还是有害。
Hash(password)
和Hash(Hash(password))
同样不安全。两者都缺乏语义安全性的概念,即输出不足以与随机数据区分开来。例如,MD5("password")
的结果是5f4dcc3b5aa765d61d8327deb882cf99
。我知道这是password
的MD5哈希值,并且可以从随机值中区分出来。相反,您应该使用HMAC。它具有可证明的安全性并且是一个PRF。 - jww