
| 类型 | 密码散列函数(哈希算法) |
| 设计者 | 罗纳德·李维斯特(Ronald Rivest) |
| 推出时间 | 1991 年设计,1992 年发布为 RFC 1321 |
| 输出长度 | 128 位(32 个十六进制字符) |
| 前身 | MD4 |
| 安全状态 | 已被攻破,不建议用于安全场景 |
MD5(Message-Digest Algorithm 5,消息摘要算法第五版)是一种应用极为广泛的密码散列函数,它能把任意长度的输入数据计算成一个固定为 128 位的散列值,就像给数据生成一枚独一无二的「数字指纹」。
MD5 由美国密码学家罗纳德·李维斯特(Ronald Rivest)于 1991 年设计,用来取代此前存在缺陷的 MD4 算法,并于 1992 年以 RFC 1321 的形式正式公开。此后二十多年里,它成为互联网上最常见的散列算法之一。
MD5 的典型用途包括:校验下载文件是否完整、判断两份数据是否一致、为数据库记录生成唯一标识等。很多软件官网会同时公布安装包的 MD5 值,用户下载后自行计算比对,即可确认文件没有被篡改或损坏。
需要强调的是,MD5 在密码学意义上已被攻破。研究人员已经能够在可接受的时间内构造出两个内容不同、但 MD5 值完全相同的文件(即「碰撞」),因此它不再适合用于数字签名、SSL 证书、密码存储等安全场景。
由于碰撞攻击已经非常成熟,主流安全标准均已弃用 MD5,推荐改用 SHA-256 等更强的算法。存储用户密码时,则应使用 bcrypt、Argon2 这类专门的慢速哈希方案,并加盐处理。目前 MD5 只适合用在对抗攻击要求不高的场景,例如普通的文件校验和数据去重。
问:MD5 可以被「解密」吗?答:MD5 是单向散列而不是加密,理论上不存在解密。但常见的短密码可以通过庞大的「彩虹表」反查出来,这也是不建议用 MD5 存密码的原因之一。
问:现在还能用 MD5 吗?答:用于文件完整性校验、缓存键、数据去重等非安全场景仍然可以;凡是涉及签名、证书、密码存储等安全需求,都应改用 SHA-256 或专用密码哈希算法。
问:MD5 和 SHA-256 有什么区别?答:两者都是散列函数,但 SHA-256 输出 256 位,抗碰撞能力远强于 MD5,目前尚未被有效攻破,是安全场景下的主流选择。

| 类型 | 密码散列函数(哈希算法) |
| 设计者 | 罗纳德·李维斯特(Ronald Rivest) |
| 推出时间 | 1991 年设计,1992 年发布为 RFC 1321 |
| 输出长度 | 128 位(32 个十六进制字符) |
| 前身 | MD4 |
| 安全状态 | 已被攻破,不建议用于安全场景 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧