Hash 在数据库中为每个密码存储两个哈希值是一个好主意吗?

Hash 在数据库中为每个密码存储两个哈希值是一个好主意吗?,hash,cryptography,passwords,Hash,Cryptography,Passwords,在数据库中为每个密码存储两个哈希值(例如SHA-1和MD5)并在登录脚本中检查这两个哈希值以防止冲突,这是一个好主意吗?另一方面,从两个哈希值计算密码不是更容易吗(例如,如果黑客访问了数据库)?我真的不认为为密码存储两个哈希值,然后同时检查这两个哈希值有什么好处。你在这里所做的只是让你的应用程序有更多的工作要做,在我看来,没有提供任何额外的安全级别,因为它们仍然输入相同的密码。这可能没有什么用处 您使用的任何哈希函数都可以安全地防止意外冲突——它们几乎不可能发生。因此,您所关心的唯一冲突是黑客已

在数据库中为每个密码存储两个哈希值(例如SHA-1和MD5)并在登录脚本中检查这两个哈希值以防止冲突,这是一个好主意吗?另一方面,从两个哈希值计算密码不是更容易吗(例如,如果黑客访问了数据库)?

我真的不认为为密码存储两个哈希值,然后同时检查这两个哈希值有什么好处。你在这里所做的只是让你的应用程序有更多的工作要做,在我看来,没有提供任何额外的安全级别,因为它们仍然输入相同的密码。

这可能没有什么用处

您使用的任何哈希函数都可以安全地防止意外冲突——它们几乎不可能发生。因此,您所关心的唯一冲突是黑客已经破坏了您的数据库,并使用了您的哈希,试图找出生成目标哈希的密码

这被称为“第二次前图像攻击”,这是难以置信的困难。对于任何相对较新的算法,即使追溯到MD4,也没有已知的第二个前图像攻击。这不应该是一个严重的问题

然而,如果你使用的是一个通用的哈希函数,那么人们暴力强迫你的哈希是一个现实的问题您不应该使用像SHA-2这样的通用哈希函数,即使使用SALT也不应该。您应该使用密码散列函数,如bcrypt,它可以抵抗暴力强制。如果您使用的是普通的散列函数,那么,正如您所注意到的,存储两个意味着它们只需要对较弱的散列函数进行强制操作——这是另外一件可能出错的事情


不用麻烦了。改为使用密码哈希函数。这样会更安全、更简单。

。总之,发生冲突的几率大约为2^64,假设你有两个相同的哈希,它们是独立的帐户,那么怎么会有人知道呢?我投票以离题的方式结束这个问题,因为它属于crypto.se.comIt可以防止这种攻击,因为md5仍然无法匹配。