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

时间:2017-10-03 07:02:08

标签: hash passwords password-protection

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

1 个答案:

答案 0 :(得分:3)

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

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

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

通常,自己编写此代码是一个坏主意。尝试使用其他服务进行身份验证,例如FacebookGoogle。他们的代码可能比单个开发人员想出的任何东西都要经过更好的测试和设计。