gpt4 book ai didi

php - 如何使 MD5 更安全?还是真的有必要?

转载 作者:行者123 更新时间:2023-12-02 05:24:10 25 4
gpt4 key购买 nike

我将用户名和密码存储在 MySQL 数据库中,并使用 MD5 对它们进行散列。但是,我只使用标准的 PHP 函数,没有做任何修改。现在,我读到 MD5 已损坏。你是怎么做的?您是通过不同的哈希机制多次运行它还是添加某种形式的盐?

最佳答案

我很惊讶人们如何跳上“该死的,它坏了,我不会使用它!”的潮流,不要犯同样的错误。

你不能让 MD5 变得更好。即使使用 SHA-1 也容易受到与 MD5 相同类型的攻击。
使用 bcrypt 将比 MD5 和 SHA 算法使用更多的 CPU。

MD5 的设计速度与 SHA 相同。 bcrypt 不是,它允许更多的排列,这使得某人更难尝试解密原始字符串。

您需要知道为什么 MD5 被认为是“损坏的”。

  • 因为计算最多 6 个字符的彩虹密码表速度很快 .

  • 使用今天的计算能力,人们可以创建一个字符数组和 MD5 所有排列,并将它们映射到原始字符串。这就是你获得彩虹 table 的方式。如果有人下载您的数据库,然后将密码与他们的彩虹表进行比较 - 他们可以获得用户的原始密码。这很危险的原因是因为人们在许多事情上使用相同的密码 - 包括 Paypal 和其他货币处理服务。这就是为什么你使用所谓的盐。这使得获取原始字符串变得更加困难,因此对用户的密码进行加盐(比方说通过反转它们并对反转输入进行 MD5 处理)将使攻击者更难将哈希恢复为原始字符串。
  • 因为碰撞 .

  • 什么是碰撞?如果你给散列函数提供两个不同的字符串并且它返回相同的散列值——那就是冲突。它如何转换为用于登录的网络和散列密码?如果您对 user1/password1 和 user2/password2 具有相同的哈希值 - 他们可以以其他人身份登录。这就是碰撞在安全方面发挥作用的地方。

    MD5 被认为已损坏的原因是因为 MD5 为小百分比不同的字符串返回相同的哈希值。计算该字符串可能是什么并不容易!
    从数学的角度来看 - 是的,它是“坏的”,因为如果您的字符串有 100 个字符并且它与其他字符串有 10 个字符不同(10% 的差异)-您会得到相同的哈希值。

    适用于 MD5 的内容适用于所有散列算法。最后,全部 没有无限数量的可能哈希。
    但是,其中一些(如 MD5)具有较少可能的哈希值并且执行速度更快。

    最后,如果有人访问了您的数据库 - 您会遇到比使用 MD5 而不是 bcrypt 或 SHA1 更大的问题。

    关于php - 如何使 MD5 更安全?还是真的有必要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5990613/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com