浏览这个网站、许多论坛、在线文章,我们总是建议使用一种特定的方式来存储密码哈希:
function (salt, pass) {
return ( StrongHash(salt + pass) );
}
但为什么要采用这种确切的方式?为什么我们不建议这样做?
function (salt, pass) {
return (StrongHash(( StrongHash(salt) + StrongHash(pass) ));
}
或者甚至是这样的?
function (salt, pass) {
var data = salt + pass;
for (i=0;i < 1000; i++) {
data += StrongHash(salt + data)
};
return (data);
}
还是其他一些疯狂的组合?为什么我们特别说哈希原始盐和原始密码的连接?两者都被散列的散列似乎是一个相当高熵的替代方案,就像我的第三个示例一样散列 1000 次。为了熵的缘故,我们为什么不将第一个哈希值再哈希几次?
第一种方式有什么了不起的?
根据要求,这方面的例子:
- http://www.codinghorror.com/blog/2007/09/rainbow-hash-cracking.html
- 密码哈希:加盐+胡椒还是盐就够了?
- 拉伸哈希,多次迭代与更长的输入字符串
- https://www.aspheute.com/english/20040105.asp
- https://phpsec.org/articles/2005/password-hashing.html
- https://msdn.microsoft.com/en-us/library/aa545602.aspx#Y93
- https://www.developerfusion.com/article/4679/you-want-salt-with-that/3/
- https://ca3.php.net/manual/en/function.hash.php#101987
- https://ca3.php.net/manual/en/function.hash.php#89568