Skip to content
加密解密2026-08-284 分钟阅读

现象:一搜"MD5 解密"出来一堆网站

网上很多"MD5 解密"站点,粘贴哈希秒出原文,于是很多人以为 MD5 是可以逆向的加密。这是个大误区,必须先澄清。

MD5 不是加密,是哈希(单向)

加密是可逆的(有密钥就能解回明文);MD5 是哈希摘要,设计上就是单向、不可逆的——给定原文能算出固定长度的摘要,但从摘要反推原文在数学上不可行(只能暴力穷举)。

那么那些"解密网站"是怎么回事?它们其实是彩虹表 / 查库:事先把海量常见字符串(密码、单词)的 MD5 算好存起来,你查的时候只是去库里匹配。它只能还原"库里恰好有"的弱口令,对长随机字符串毫无办法。

| 说法 | 真相 | |---|---| | "MD5 解密网站" | 彩虹表反查,仅覆盖常见弱口令 | | "MD5 能还原" | 不能,只能穷举/查库 | | "MD5 是加密" | 不是,是哈希 |

碰撞是什么,为什么危险

碰撞指:两个不同的输入,算出了相同的 MD5 值。理论上 MD5 只有 128 位输出空间,输入空间却是无限的,碰撞必然存在(鸽笼原理);问题是能否低成本地人为制造碰撞。2004 年后,制造 MD5 碰撞已被完全攻破——现在普通电脑几分钟就能造出两个内容不同、哈希却一样的文件。

经典的攻击姿势叫前缀碰撞:攻击者准备好两段"恶意内容不同、但 MD5 相同"的文件 A 和 B,先把无害的 A 交给你签名/校验,事后用 B 替换 A——校验值纹丝不动,内容已经调包。2012 年著名的 Flame 病毒就利用微软终端服务器仍使用 MD5 的漏洞,伪造了代码签名证书。

危害在于:如果系统靠 MD5 判断"这份文件/这段数据没被篡改",攻击者就能拿一个恶意文件伪装成合法文件(哈希一致),骗过校验。所以:

  • 数字签名、完整性校验、证书指纹 —— 绝不能用 MD5
  • 存储密码 —— 更不能用 MD5(用 bcrypt/argon2 这类慢哈希加盐)。

顺带澄清一个相邻误区:MD5 输出 128 位 = 32 个十六进制字符。"哈希长度越短越容易被穷举",对原像攻击而言 MD5 仍是 2^128 量级(穷举不现实),真正被攻破的是碰撞——两者攻击成本差好几个数量级,所以"MD5 还能用于粗校验"和"MD5 不能用于防伪"并不矛盾。

结论:MD5 还能用在哪

只适合无对抗场景的粗校验,比如下载后比对自己的备份是否比特级一致、去重自己产生的数据。凡涉及"有人可能故意伪造",一律换 SHA256 或更强算法。

打开 ToolVault 工具匣 的 MD5 哈希工具SHA256 哈希工具 本地计算,文件不上传;要校验文件完整性,哈希校验工具 支持把算出的哈希与官方公布值直接比对。

FAQ

那"解密网站"能用吗?

查自己的弱口令、确认某段已知明文是否被哈希,可以玩玩;但绝不能用它"验证安全性",更别上传任何敏感数据到这类第三方站点——你上传的哈希本身可能就是敏感信息(比如泄露库里的密码哈希)。

SHA256 也会被碰撞攻破吗?

目前没有实用的 SHA256 碰撞攻击,远比 MD5 安全。但哈希本身都终将被算力追上,长期看应关注 SHA-3 / BLAKE2 等更新算法。

密码到底该怎么存?

用 bcrypt、scrypt 或 Argon2,且必须加盐。不要用任何快速哈希(MD5/SHA 系列)直接存密码。快速哈希每秒能算几十亿次,GPU 集群穷举 8 位纯数字密码只需几秒;bcrypt 通过可调成本因子把单次计算拖到几十毫秒,穷举成本直接翻十几个数量级。

系统 SQL 里已经存了 MD5 密码,怎么迁移?

不要"一次性把 MD5 解密再重存"(也解不了)。常见做法是渐进升级:用户下次登录时,先用 MD5 校验旧密码,验证通过后立刻用 bcrypt 对明文重新哈希存储,并删掉 MD5 字段。长期没登录的账号到期强制重置。

文件下载链接只给了 MD5 怎么办?

可以用来确认"下载过程没出错"(比特翻转、截断),这个场景 MD5 够用。但如果你想确认"文件没被中间人替换",MD5 说明不了问题——尤其当 MD5 值本身也来自同一个不可信渠道时,攻击者会把恶意文件和配套的 MD5 一起给你。校验值必须来自独立于下载渠道的来源(官网 HTTPS 页面、维护者的 GPG 签名)。


本文由 ToolVault 工具匣 提供。相关工具:MD5 哈希SHA256 哈希HMAC 生成。访问 首页 查看更多开发者工具。


广告