Javascript 多次运行sha512哈希函数的好处
我在出版物中看到过这段代码。生成11次散列有什么好处?因为熵,它比一个更安全吗Javascript 多次运行sha512哈希函数的好处,javascript,hash,sha512,Javascript,Hash,Sha512,我在出版物中看到过这段代码。生成11次散列有什么好处?因为熵,它比一个更安全吗 var hash = sha512(salt+":"+user+":"+passwd); for(i = 0; i < 10; i++) hash = sha512(salt+":"+user+":"+passwd); var hash=sha512(salt+”:“+user+”:“+passwd); 对于(i=0;i
var hash = sha512(salt+":"+user+":"+passwd);
for(i = 0; i < 10; i++)
hash = sha512(salt+":"+user+":"+passwd);
var hash=sha512(salt+”:“+user+”:“+passwd);
对于(i=0;i<10;i++)
hash=sha512(salt+“:“+user+”:“+passwd);
如果攻击者获得对包含散列密码的数据库的访问权限,则更安全
将其哈希多次将使攻击者的速度降低一个与哈希迭代次数成线性关系的系数,同时尝试使用蛮力攻击从哈希中猜出普通密码
从这个角度来看,我想说10是一个相当小的数字,如果您担心这种情况(攻击者获得对密码数据库的访问权),我想最好是迭代次数多于10次(比如1000次)
编辑:我刚刚注意到,在这个问题中,重复散列总是使用原始密码,而不是像下面的代码那样反复散列
var hash = sha512(salt+":"+user+":"+passwd);
for(i = 0; i < 10; i++)
hash = sha512(salt+":"+user+":"+hash);
var hash=sha512(salt+”:“+user+”:“+passwd);
对于(i=0;i<10;i++)
hash=sha512(salt+“:“+user+”:“+hash);
我的回答指的是这种情况(一次又一次地散列),而不是问题中提到的代码。如果攻击者获得对包含散列密码的数据库的访问权限,则更安全 将其哈希多次将使攻击者的速度降低一个与哈希迭代次数成线性关系的系数,同时尝试使用蛮力攻击从哈希中猜出普通密码 从这个角度来看,我想说10是一个相当小的数字,如果您担心这种情况(攻击者获得对密码数据库的访问权),我想最好是迭代次数多于10次(比如1000次) 编辑:我刚刚注意到,在这个问题中,重复散列总是使用原始密码,而不是像下面的代码那样反复散列
var hash = sha512(salt+":"+user+":"+passwd);
for(i = 0; i < 10; i++)
hash = sha512(salt+":"+user+":"+hash);
var hash=sha512(salt+”:“+user+”:“+passwd);
对于(i=0;i<10;i++)
hash=sha512(salt+“:“+user+”:“+hash);
我的回答指的是这种情况(一次又一次地散列),而不是问题中提到的代码。与散列一次相比,本例中的最终散列值不会更安全(甚至也不会有任何不同)。我从提供的代码中看到的唯一效果是它需要更长的时间 关于重复散列的一些链接、注释和其他答案,只有将后续散列函数应用于前一个散列的输出时,这才有意义。asker的示例只是反复散列相同的数据,产生相同的结果 此代码可能更有效:
var hash = sha512(salt+":"+user+":"+passwd);
for(i = 0; i < 10; i++)
hash = sha512(salt+":"+user+":"+passwd+":"+hash);
var hash=sha512(salt+”:“+user+”:“+passwd);
对于(i=0;i<10;i++)
hash=sha512(salt+“:“+user+”:“+passwd+”:“+hash);
本例中的最终散列值并不比散列一次更安全(甚至没有任何不同)。我从提供的代码中看到的唯一效果是它需要更长的时间
关于重复散列的一些链接、注释和其他答案,只有将后续散列函数应用于前一个散列的输出时,这才有意义。asker的示例只是反复散列相同的数据,产生相同的结果
此代码可能更有效:
var hash = sha512(salt+":"+user+":"+passwd);
for(i = 0; i < 10; i++)
hash = sha512(salt+":"+user+":"+passwd+":"+hash);
var hash=sha512(salt+”:“+user+”:“+passwd);
对于(i=0;i<10;i++)
hash=sha512(salt+“:“+user+”:“+passwd+”:“+hash);
我不确定,但我想说的好处是,如果某个哈希在彩虹表中,例如“somepassword”>“somehash”
,那么如果将其哈希多次,则无法在该表中找到,或者需要该表大10倍。这段代码是什么?这与运行SHEA512一次完全相同——熵没有实际变化。最多,这会使它花费稍长的时间(以防止暴力强制),但我真的怀疑它是否有效。重复运行同一个哈希会变得更安全,因为以暴力强制方式重新创建哈希在计算上会更昂贵。请查看一些答案,实际上,重新阅读这个-实际发布的代码绝对没有任何好处。完全相同的散列将生成11次。这实际上与生成一次散列相同。我第一次读到它时,我以为它是在上一个散列上运行SHA512。我不确定,但我想说的是,如果某个散列在彩虹表中,例如,“somepassword”>“somehash”
,然后,如果你将它散列多次,它将不会在这样的表中找到,或者它将要求这个表大10倍。这段代码到底是什么?这与运行SHEA512一次完全相同——熵没有实际变化。最多,这会使它花费稍长的时间(以防止暴力强制),但我真的怀疑它是否有效。重复运行同一个哈希会变得更安全,因为以暴力强制方式重新创建哈希在计算上会更昂贵。请查看一些答案,实际上,重新阅读这个-实际发布的代码绝对没有任何好处。完全相同的散列将生成11次。这实际上与生成一次散列相同。我第一次读到它的时候,我以为它是在上一个散列上运行SHA512。应该注意的是,这是一个非常糟糕的密钥拉伸实现,有一种经过验证的方法来完成这个迭代,叫做。应该注意的是,这是一个非常糟糕的密钥拉伸实现,有一种经过验证的方法来完成这个迭代,叫做。