我在出版物中看到过这段代码。它为生成哈希11次带来了什么好处?由于熵,它比一个更安全吗?
var hash = sha512(salt+":"+user+":"+passwd);
for(i = 0; i < 10; i++)
hash = sha512(salt+":"+user+":"+passwd);
答案 0 :(得分:5)
此示例中的最终散列值不比单独散列一次更安全(甚至没有任何不同)。我从提供的代码中看到的唯一影响是它需要更长的时间。
关于重复散列的一些链接,注释和其他答案,只有将后续散列函数应用于前一个散列的输出时,这才有意义。提问者的例子只是一遍又一遍地散列相同的数据,产生相同的结果。
此代码可能更有效:
var hash = sha512(salt+":"+user+":"+passwd);
for(i = 0; i < 10; i++)
hash = sha512(salt+":"+user+":"+passwd+":"+hash);
答案 1 :(得分:2)
如果攻击者获得对包含散列密码的数据库的访问权限,则更安全。
多次进行哈希处理会使攻击者减慢与哈希迭代次数成线性关系的因素,同时尝试使用暴力攻击来猜测哈希中的普通密码。从这个角度来看,我会说10是一个相当小的数字,如果这种情况(攻击者获得对密码数据库的访问权限)是你关注的问题,我想更好的是迭代次数超过10次(比如说1000次) )。
编辑:我刚刚注意到问题中重复哈希总是使用原始密码,并且不会像下面的代码那样一遍又一遍地重写哈希
for (auto &sth : myset){
sth=[some value];
}
我的回答是指这种情况(一遍又一遍地散列哈希),而不是问题中提到的代码。