MD5、SHA-256、UUID 名字相近但用途完全不同:MD5/SHA-256 是哈希算法(同输入同输出),UUID 是唯一标识生成器(每次生成几乎都不同)。MD5 已不再安全,密码必须用 SHA-256+盐 或更专业的 bcrypt/Argon2。
一句话区别
| 工具 | 类别 | 输出 | 安全性 | 主要用途 |
|---|
| MD5 | 哈希算法 | 32 位十六进制(128 bit) | 极低(已破解) | 老系统文件校验、缓存键 |
| SHA-256 | 安全哈希 | 64 位十六进制(256 bit) | 高 | 密码(须加盐)、签名、防篡改 |
| UUID | 唯一标识 | 36 位带横杠 | 无安全属性 | 主键、订单号、设备 ID |
关键差别
| 维度 | MD5 / SHA-256 | UUID |
|---|
| 是否同输入同输出 | 是 | 否(每次几乎都不同) |
| 是否可逆 | 不可逆 | 不是加密,无可逆概念 |
| 是否依赖输入 | 是 | UUID v4 完全随机 |
| 防碰撞 | 取决于算法强度 | 概率上几乎不会冲突 |
各自简介
MD5
- 速度快,但已被破解,不能用于密码或对抗性场景
- 仍可用:非敏感的文件去重、缓存键、ETag
- 示例:
123456 → e10adc3949ba59abbe56e057f20f883e
SHA-256
- 当前主流安全哈希,防碰撞强
- 标准用途:密码(必须加盐,更优用 bcrypt/Argon2)、接口签名、安装包/文件完整性
- 示例:
123456 → 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca120c9c3923dbc662
UUID
- 全球唯一标识,无序无规律,不依赖中央授权
- v1 基于时间+MAC,v4 基于随机数(最常用),v5 基于命名空间+SHA-1
- 用途:分布式 ID、订单号、文件名
- 示例:
123e4567-e89b-12d3-a456-426614174000
怎么选
| 需求 | 选择 |
|---|
| 用户密码存储 | bcrypt / Argon2 / scrypt(次选 SHA-256 + 盐) |
| 文件 / 数据完整性 | SHA-256 |
| 接口签名、防篡改 | SHA-256 + HMAC |
| 分布式主键、订单号 | UUID v4 |
| 老项目兼容、非敏感校验 | MD5 |
| 新项目安全相关 | 永远不要用 MD5 |
Python 速查
import hashlib, uuid
data = "123456"
print(hashlib.md5(data.encode()).hexdigest()) # MD5
print(hashlib.sha256(data.encode()).hexdigest()) # SHA-256
print(str(uuid.uuid4())) # UUID v4