如何让MD5更安全?还是真的有必要吗?

Fra*_*lea 2 php security md5

我将用户名和密码存储在MySQL数据库中,并使用MD5进行哈希处理.但是,我只是使用标准的PHP函数而没有任何修改.现在,我读到MD5坏了.你好吗?您是通过不同的哈希机制运行它几次还是添加某种形式的盐?

Mic*_*.V. 11

我很惊讶人们如何跳上"该死的,它坏了,我不会用它!",不要犯同样的错误.

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

MD5设计得很快,与SHA相同.bcrypt不是,它允许更多的排列,这使得某人尝试解密原始字符串变得更加困难.

你需要知道为什么MD5被认为是"破碎的".

  • 因为计算密码的彩虹表很快,最长可达6个字符.

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

  • 因为碰撞.

什么是碰撞?如果你给散列函数两个不同的字符串,它返回相同的散列 - 这是一个碰撞.它如何转换为登录的Web和哈希密码?如果你对user1/password1和user2/password2有相同的哈希值 - 他们可以像其他人一样登录.这就是碰撞在安全方面发挥作用的地方.

MD5被认为被破坏的原因是因为MD5为小百分比不同的字符串返回相同的哈希值.而且计算字符串可能并不容易!从数学的角度来看 - 是的,它是"破碎的",因为如果你的字符串有100个字符,并且它与10个字符中的其他字符串不同(10%差异) - 你得到相同的哈希值.

什么适用于MD5适用于所有哈希算法.最后,它们都没有无数可能的哈希值.但是,其中一些(如MD5)具有较少的哈希值并且执行速度更快.

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

  • 对于读这篇文章的其他人来说,在PHP中你只需使用:hash("sha512",123); 您可以随意添加盐. (2认同)

dyn*_*mic 6

为每个存储的密码添加一个盐,该密码对于每个密码都不相同