Hash 密码哈希:无限量的正确密码?

Hash 密码哈希:无限量的正确密码?,hash,passwords,password-protection,Hash,Passwords,Password Protection,当我使用散列函数加密用户的密码并将其存储在数据库中时,不是有无限多的正确密码吗? 因为多个字符串可以产生相同的散列,对吗? 这样安全吗?你说得对。因为散列通常比它们表示的数据短,所以有时两个不同的输入会产生相同的散列。我们称之为散列冲突。要减少这种情况,请选择更好的哈希算法。请注意,被认为是好的哈希算法的标准总是在变化,请查看S.O.post 出于另一个原因,在数据库中存储普通哈希是不安全的。有使用常用哈希算法完成的哈希的在线列表。因此,您可以选择这些列表中的一个(称为彩虹表)和数据库中的哈希密

当我使用散列函数加密用户的密码并将其存储在数据库中时,不是有无限多的正确密码吗? 因为多个字符串可以产生相同的散列,对吗?
这样安全吗?

你说得对。因为散列通常比它们表示的数据短,所以有时两个不同的输入会产生相同的散列。我们称之为散列冲突。要减少这种情况,请选择更好的哈希算法。请注意,被认为是好的哈希算法的标准总是在变化,请查看S.O.post

出于另一个原因,在数据库中存储普通哈希是不安全的。有使用常用哈希算法完成的哈希的在线列表。因此,您可以选择这些列表中的一个(称为彩虹表)和数据库中的哈希密码,然后通过在彩虹表中进行简单的查找,确定哪些哈希对应于哪些密码

由于许多用户会选择最常见的坏密码之一(例如qwerty),这是一个巨大的问题。这个问题的解决方案称为哈希和盐。在散列之前,首先向密码中添加一个大的随机字符串。这意味着即使是两个相同的密码也会导致数据库中出现不同的哈希值。这是更好的解释和解释


一般来说,自己编写这段代码是个坏主意。尝试使用其他服务(如或)进行身份验证。他们的代码可能比单个开发人员所能想到的任何东西都要经过更好的测试和设计

这不是官方文件,我也不是安全专家,但我在去年更详细地写了这篇文章。如果你喜欢的话就去看看。希望能有帮助