MD5的详细解析与避免MD5碰撞方法

最近网络中开始出现弃用 MD5 算法的文章,一开始也没有太注意,毕竟 MD5 这种算法已经使用非常久的时间了,一些编程语言都内置了 MD5 的方法或者是函数,突然间要弃用,还是有点舍不得的,毕竟新的算法也还没有发明出来。那么为什么要弃用 MD5 算法呢,这篇文章不会告诉你 MD5 算法的原理,但是,会讲解一些其他高深的文章中没有提到的一些细节的东西。

  MD5的用处

  无论是密码记录用户验证还是文件完整性存储,笼统的说就是验证数据是否匹配。数据库中使用明文记录密码明显是不可行的,但是使用 MD5 就不同了,MD5 算法的高明之处就是不可逆,因为在算法中采取了抽样、分组等等算法,他不会将数据的所有内容加入运算,而是根据规则选择指定内容运算,所以,同样的字符串或者内容进行 MD5 运算的时候,得到的结果也是一样的,所以使用 MD5 记录密码,可以很有效的解决一些明文带来的问题,至于验证数据准确性就更加不用说了。

  MD5有相同

  MD5 有相同这个已经算是被承认的,但是几率非常小。

  MD5 相同的情况叫做“碰撞”,现在网络中已经出现了两个相同的 MD5 可执行文件,你可能会问,MD5 相同到底会造成什么问题。

  一些网盘使用的是 MD5 的方式来验证文件是否已经被上传过,如果上传过就直接告诉用户上传过就好了,也就不用再次上传去占用而外的空间,假设 Win9 现在发布了,我马上就构造一个假的包含病毒的但是 MD5 和官方镜像相同的安装镜像放置到 A 网盘,A 网盘使用 MD5 验证数据是否相同,那么现在的问题就是,用户下载的全部都是我制作的光盘,而非微软官方的。当然,这种构造的方法仍然是非常高级的东西,不是很容易能够做到的。

  字符串1:

  4d c9 68 ff 0e e3 5c 20 95 72 d4 77 7b 72 15 87

  d3 6f a7 b2 1b dc 56 b7 4a 3d c0 78 3e 7b 95 18

  af bf a2 00 a8 28 4b f3 6e 8e 4b 55 b3 5f 42 75

  93 d8 49 67 6d a0 d1 55 5d 83 60 fb 5f 07 fe a2

  字符串2

  4d c9 68 ff 0e e3 5c 20 95 72 d4 77 7b 72 15 87

  d3 6f a7 b2 1b dc 56 b7 4a 3d c0 78 3e 7b 95 18

  af bf a2 02 a8 28 4b f3 6e 8e 4b 55 b3 5f 42 75

  93 d8 49 67 6d a0 d1 d5 5d 83 60 fb 5f 07 fe a2

  上方两个字符串的 MD5 值完全相同。

  现在需要担心什么

  MD5 会发生碰撞已经是被发现的了,但是我们需要担心吗,我要说的是,目前为止还不用担心,首先要构造 MD5 碰撞是非常难的,理论上字符串越长 MD5 就越不可能相同,并且借助 SHA-1 算法的帮助,双管齐下,也就没有太大问题了,所以现在 MD5 还没有轮到被弃用的时候。

  SHA-1 会碰撞吗

  SHA-1 也会发生碰撞,但是几率比 MD5 小的多。

  怎样解决碰撞

  解决碰撞其实可以通过 MD5 和 SHA-1 结合使用来实现。我是这样做的,首先将文件 A 的 MD5 值记为 B 再把 A 的 SHA-1 记为 C,之后用将 B 和 C 相加之后再次运算 MD5 值就好了,MD5 值碰撞的几率已经很小,再结合 SHA-1 的话,基本上就不会发生碰撞的问题出现了。在新的算法普及之前,MD5 还是可以继续使用的。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值