MD5 是一种广泛流传的哈希算法,可把任意长度的数据计算成一段固定的 128 位摘要,常用于文件校验和数据比对。由于已被证实可以人为制造碰撞,MD5 不再适合密码存储、数字签名等安全场景。

| 类型 | 密码散列函数(哈希算法) |
| 设计者 | 罗纳德·李维斯特(Ronald Rivest) |
| 推出时间 | 1991 年 |
| 标准文档 | RFC 1321 |
| 输出长度 | 128 位(32 个十六进制字符) |
| 安全状态 | 已被攻破,不建议用于安全场景 |
MD5(Message-Digest Algorithm 5,消息摘要算法第五版)是一种经典的密码散列函数,能将任意长度的输入数据转换为一段固定长度为 128 位的哈希值,通常以 32 个十六进制字符的形式呈现。
MD5 由美国密码学家罗纳德·李维斯特(Ronald Rivest)于上世纪九十年代初设计,用来接替他此前设计的 MD4 算法,随后以 RFC 1321 的形式公开成为互联网标准文档。它计算速度快、实现简单,一度被广泛用于文件完整性校验、密码存储和数字签名等场景。
哈希函数的核心特性是「单向性」:从数据算出摘要很容易,但从摘要反推原始数据在计算上不可行;同时输入哪怕只改动一个字节,输出的哈希值也会面目全非。这使得 MD5 很适合用来快速判断两份数据是否一致。
MD5 的抗碰撞性早已被攻破:研究人员(包括中国密码学家王小云团队)证明可以构造出两份内容不同但 MD5 值相同的数据,攻击者甚至能借此伪造证书。此外,简单密码的 MD5 值可以被彩虹表批量反查。因此现代安全实践中,数字签名和证书应改用 SHA-256 等更强的算法,密码存储则应使用 bcrypt、Argon2 这类专门的慢哈希方案。
问:MD5 是加密算法吗?答:不是。加密是可逆的,而 MD5 是单向摘要,没有「解密」一说,网上所谓的 MD5 解密其实是查表碰撞。
问:现在还能用 MD5 吗?答:在无对抗的场景下可以,比如校验下载文件是否损坏、数据库去重;但涉及安全的场合(密码、签名、证书)应避免使用。
问:MD5 值相同就代表文件一定相同吗?答:绝大多数情况下是,但由于存在人为构造碰撞的可能,严格校验时建议同时比对 SHA-256 等更强的哈希值。

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