news 2026/5/27 5:35:07

王小云院士真地破解了 MD5 吗

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
王小云院士真地破解了 MD5 吗

​​​​​1、MD5 简介

MD5(Message-Digest Algorithm 5)是一种被广泛使用的消息摘要算法,也称为哈希算法、散列算法或杂凑算法,可以产生出一个定长的 128 位(16 字节)的散列值(Hash Value),一般用于数字签名以确保信息传输完整性密码的加密存储

MD5 由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于 1992 年公开,用以取代 MD4 算法。

2、MD5 应用场景

一个安全的散列算法需要满足如下两个条件,也是散列算法的两个特性。

(1)抗碰撞性。根据一个输入,找到一个其它输入得到相同的输出,在计算上是不可行的;

(2)不可逆性。根据一个输出,找到一个输入其散列值等于输出,在计算上是不可行的,即不可能从结果逆向推导初始值。

注意,抗碰撞性并不是说散列算法无碰撞,无碰撞的算法不可能是一个散列算法,而只能是一个无损压缩算法,因为散列算法在计算过程中必然会丢失原文部分信息

MD5 作为一个应用广泛散列算法,满足上述两个特点。根据第一个特点,MD5 可用于信息的数字签名用来验证信息传输的完整性和发送者的身份认证。根据第二个特点,MD5 可用于用户密码的散列存储。

(1)信息的数字签名。

对重要信息进行 MD5 计算生成散列值,作为信息的数字签名,用于确定信息在传输过程中是否被篡改以及发送者的身份认证。

(2)用户密码的散列存储。

常见用途就是网站敏感信息加密,比如用户名密码。将用户密码进行散列计算后落地存储,即使被拖库,用户的密码仍是安全的,因为MD5算法的不可逆性决定无法通过散列值逆向推算出密码。当然,密码破解有很多方法,比如暴力破解、彩虹表等,还是有可能从正向破解密码散列值的。

3、MD5 生成的 Hash 值为何不可逆?

MD5 是一个“信息有损压缩”过程,里面有很多不可逆的运算,会丢失绝大部分原始信息,导致从结果反推原文,所以不可逆。

比如移位,假设 10010001 左移两位后是 01000100,你没有什么办法把它移回来。

一个简单的类比:数字“求和取个位”。

假设我们设计一个运算:输入两个数字,比如 123 和 456,然后输出它们相加后的个位数。

过程:123 + 456 = 579 → 取个位数 9

问题:现在,我只给你结果 9,请你告诉我原始的输入是什么?

你会发现,有无数种可能:

(123, 456)、(100, 809)、(1, 8)、(999, 10)...

所有这些数字对相加后的个位数都是 9。

这个“求和取个位”的过程,就是一个简单的、不可逆的哈希函数。 MD5 的原理与此类似,但远比这个复杂。

4、王小云院士真地破解了 MD5 吗?

在 2004 年,王小云院士与其他研究人员合作发表了一篇名为《Collisions for Hash Functions》的论文,展示了如何通过碰撞攻击生成具有相同 MD5 哈希值的两个不同输入

所谓的“破解”其实误导了很多人,并不是说扔给王小云一个 MD5 散列值,然后她马上就能算出一个原文来。从密文推算出明文理论上是不可能的,所以王小云的研究成果并不能通过 MD5 的散列值逆向推算出明文。即给定 Hash 值,王小云不能逆向计算出 M。

MD5(M)=Hash

其中 M 指密码的明文,Hash 表示密码散列后的密文。

实际上,王小云的研究成果如下:

MD5(M1)=MD5(M2)

即给定消息 M1,能够计算获取 M2,使得 M2 产生的散列值与 M1 产生的散列值相同。如此,MD5 的抗碰撞性就已经不满足了,使得 MD5 不再是安全的散列算法。这样一来,MD5 用于数字签名将存在严重问题,因为可以篡改原始消息,而生成相同的 Hash 值。

这里,简单地用王教授的碰撞法给大家举个简单的例子。假如用户 A 给 B 写了个 Email 内容为 Hello,然后通过王教授的碰撞法,可能得到 Fuck 这个字符串的摘要信息和 Hello 这个字符串产生的摘要信息是一样的。如果 B 收到的 Email 内容为 Fuck,经过 MD5 计算后的,B 也将认为 Email 并没有被修改!但事实并非如此。

王小云院士的研究报告表明,MD4,MD5,HAVAL-128 和 RIPEMD 均已被证实存在上面的漏洞,即给定消息 M1,能够找到不同消息 M2 产生相同的散列值,即产生 Hash 碰撞。

后来在 2005 年,王小云同其他研究人员又发布了一篇论文《Finding Collisions in the Full SHA-1》,理论上证明了 SHA-1 也同样存在碰撞的漏洞。

随着时间的推移,计算机计算能力不断增强和攻击技术的不断进步,SHA-1算法的安全性逐渐受到威胁。在2017年,Google研究人员宣布成功生成了第一个实际的SHA-1碰撞,这意味着攻击者可以通过特定的方法找到两个不同的输入,但它们具有相同的SHA-1哈希值。

5、结论

虽然 MD5、SHA1 已经被证实在数字签名存在安全问题,但是 MD5、SHA1 在密码的散列存储方面还是很安全的算法,只要密码足够复杂,加盐且迭代次数足够多,抗得住主流的口令破解方法,如暴力破解、彩虹表、字典攻击、词表重整攻击、概率上下文无关文法等。

6、参考文献

Collisions for Hash Functions
Finding Collisions in the Full SHA-1
关于王小云破解MD5之我见
关于HASH和MD5,王小云教授的“解密”
吕吕.基于DCR系统的多功能口令恢复平台[D].华南理工大学

转自:https://dablelv.blog.csdn.net/article/details/87938911

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 19:36:47

ESP分区

电脑中的ESP分区是干什么的?UEFI(统一可扩展固件接口)与GPT(GUID分区表)的组合已成为现代计算机系统安装和启动的主流方式。然而,在这种新的安装方式下,一个名为“ESP分区”的组件显得尤为重要&…

作者头像 李华
网站建设 2026/5/25 2:44:26

规避交付风险,驱动生产效率:环形导轨选型核心逻辑与落地实施指南

摘要: 在自动化装配线、检测站及精密制造单元中,环形导轨系统已成为实现高效循环输送的关键基础设施。然而,一个常见的误区是仅关注导轨本身的品牌与价格,忽略了从设计源头到现场调试的全链路风险。本文旨在系统性地拆解环形导轨的…

作者头像 李华
网站建设 2026/5/26 18:28:55

vue3+vite mock引入使用

1、安装对应的包 npm install vite-plugin-mock mockjs -D2、配置 Vite vite.config.js import { defineConfig } from vite import vue from vitejs/plugin-vue import { viteMockServe } from vite-plugin-mockexport default defineConfig({plugins: [vue(),viteMockServe({…

作者头像 李华
网站建设 2026/5/21 23:27:54

Kotaemon如何处理超长文档?分块策略智能选择

Kotaemon如何处理超长文档?分块策略智能选择 在构建智能问答系统时,我们常常面临一个看似简单却影响深远的问题:一份长达上百页的技术手册、法律合同或企业制度文件,该如何喂给大语言模型? 毕竟,再强大的LL…

作者头像 李华
网站建设 2026/5/21 19:07:19

Kotaemon KV Cache复用技术解析:节省内存开销

Kotaemon KV Cache复用技术解析:节省内存开销 在构建企业级智能对话系统时,一个看似不起眼却影响深远的问题浮出水面:为什么用户问完第一个问题后,后续追问的响应速度越来越慢?为什么部署一个7B参数的模型需要动辄24G…

作者头像 李华
网站建设 2026/5/26 21:03:53

Kotaemon日志系统优化:问题排查从未如此简单

Kotaemon日志系统优化:问题排查从未如此简单 在构建智能对话系统时,你是否经历过这样的场景?用户反馈答案质量下降,但翻遍日志却找不到线索;线上请求突然变慢,却无法判断是检索、生成还是工具调用出了问题&…

作者头像 李华