我将用户名和密码存储在 MySQL 数据库中,并使用 MD5 对它们进行哈希处理。然而,我只使用标准的 PHP 函数,没有任何修改。现在,我读到 MD5 已损坏。你做得怎么样?您是否通过不同的哈希机制运行多次或添加某种形式的盐?
我很惊讶人们如何跟上“该死的,它坏了,我不会用它!”的潮流,不要犯同样的错误。
你无法让 MD5 变得更好。即使使用 SHA-1 也容易受到与 MD5 相同类型的攻击。
使用 bcrypt 将比 MD5 和 SHA 算法使用更多的 CPU。
MD5 的设计目标是速度快,与 SHA 相同。 bcrypt 不是,它允许更多排列,这使得某人更难尝试解密原始字符串。
您需要知道为什么 MD5 被认为是“损坏的”。
-
因为可以快速计算长度最多 6 个字符的密码彩虹表.
利用当今的计算能力,人们可以创建一组字符和所有排列的 MD5,并将它们映射到原始字符串。这就是你获得彩虹桌的方式。如果有人下载您的数据库,然后将密码与彩虹表进行比较 - 他们可以获得用户的原始密码。这之所以危险,是因为人们在许多事情上使用相同的密码 - 包括贝宝和其他货币处理服务。这就是为什么你使用所谓的盐。这使得获取原始字符串变得更加困难,因此对用户的密码加盐(比方说,通过反转密码并对反转的输入进行 MD5 处理)将使攻击者更难将哈希值恢复为原始字符串。
什么是碰撞?如果你给散列函数两个不同的字符串,它返回相同的散列 - 这就是冲突。它如何转换为用于登录的网络密码和哈希密码?如果您的 user1/password1 和 user2/password2 有相同的哈希值 - 他们可以以其他人的身份登录。这就是碰撞在安全中发挥作用的地方。
MD5 被认为损坏的原因是因为 MD5 对于差异较小的字符串返回相同的哈希值。而且要计算该字符串可能是什么并不容易!
从数学的角度来看 - 是的,它是“损坏的”,因为如果你的字符串有 100 个字符,并且它与其他字符串有 10 个字符不同(10% 的差异) - 你会得到相同的哈希值。
适用于 MD5 的内容也适用于所有哈希算法。最后,他们所有人没有无限数量的可能的哈希值。
然而,其中一些(例如 MD5)的哈希值可能较少并且执行速度更快。
最后,如果有人访问您的数据库 - 您将面临比使用 MD5 而不是 bcrypt 或 SHA1 更大的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)