常见 Hash 算法对比:MD5、SHA、SM3

一、算法介绍

🔐 MD5(Message-Digest Algorithm 5)

  • 出生年份:1992 年,Ronald Rivest 设计
  • 输出长度:128 位(16 字节),32 位十六进制字符串
  • 结构:基于 Merkle-Damgård 结构,迭代压缩函数

🔐 SHA(Secure Hash Algorithm)

算法 输出长度 年份 说明
SHA-1 160 位 1993 NIST 发布,已不建议使用
SHA-2 224/256/384/512 位 2001 目前主流,尚未被攻破
SHA-3 224/256/384/512 位 2015 采用 Keccak 算法,结构全新

🔐 SM3(国密哈希算法)

  • 出生年份:2010 年,中国国家密码管理局发布(GM/T 0004-2012)
  • 输出长度:256 位
  • 结构:基于 Merkle-Damgård 结构,压缩函数与 SHA-2 类似但细节不同
  • 地位:中国商用密码体系中的哈希标准

二、优缺点对比

算法 优点 缺点
MD5 速度快、兼容性好、实现简单 ⚠️ 已不安全:存在碰撞攻击,实际已被破解
SHA-1 速度较快、兼容性好 ⚠️ 已不建议使用:2017 年 Google 实现碰撞
SHA-2 安全强度高、广泛使用、尚未被攻破 计算相对较慢(但比很多算法快)
SHA-3 结构完全不同、安全性高、抗侧信道攻击 推出时间相对较短,生态还在完善
SM3 中国国密标准、安全性对标 SHA-2、自主可控 国际化程度低,主要在中国使用

三、安全强度排序

MD5(已破解) < SHA-1(不推荐) < SHA-224 < SHA-256 ≈ SM3 < SHA-384 < SHA-512 < SHA-3

四、使用场景

MD5

  • ❌ 严禁用于安全场景
  • ✅ 可用于:文件完整性校验(非安全场景)、数据去重、checksum
  • ⚠️ 密码存储、数字签名等禁止使用

SHA-1

  • ❌ 不推荐用于安全场景
  • ✅ 可用于:Git 版本控制(历史兼容性)
  • ⚠️ TLS/SSL 证书、数字签名等已禁止使用

SHA-2(SHA-256/384/512)

  • ✅ 当前主流哈希算法
  • 适用:密码存储(建议用 bcrypt/scrypt/argon2)、数字签名、TLS/SSL、金融数据完整性、区块链

SHA-3

  • ✅ 高安全要求场景
  • 适用:政府与军事通信(部分国家)、高安全等级系统、量子计算未来安全部署

SM3

  • ✅ 中国境内安全场景(强制使用)
  • 适用:中国政府信息系统(必须使用国密)、商用密码产品合规、中国金融 IC 卡与支付系统、电子身份证、政务系统

五、总结建议

场景 推荐算法
中国境内安全场景 SM3(国密合规)
国际通用安全场景 SHA-256 / SHA-512
最高安全等级 SHA-3
文件校验(非安全) MD5(速度优先)
密码存储 bcrypt / scrypt / argon2
相关推荐
青山木2 天前
Hot 100 --- 矩阵置零
线性代数·算法·leetcode·矩阵·哈希算法
snow@li2 天前
前端:构建工具(Vite / Webpack)的 文件指纹(File Hash) 机制 / 浏览器缓存控制
前端·webpack·哈希算法
TDengine (老段)2 天前
TDengine 连接算子 — Inner/Outer/ASOF/Window Join 的实现与使用
大数据·数据库·物联网·哈希算法·时序数据库·tdengine·涛思数据
青山木2 天前
Hot 100 --- 缺失的第一个正数
算法·leetcode·哈希算法
牛油果子哥q3 天前
unordered_set / unordered_map 底层哈希表精讲,哈希原理、哈希冲突、链地址法、源码结构、有序与无序容器终极选型全解
数据结构·算法·哈希算法·散列表
牛油果子哥q3 天前
哈希表经典刷题模型与布隆过滤器精讲,哈希查重、哈希计数、双哈希映射、误判原理与工业级落地应用
数据结构·算法·哈希算法·散列表
临沂堇3 天前
刷题日志 | Leetcode Hot 100 哈希
算法·leetcode·哈希算法
数据法师3 天前
视频文件重复检测工具:基于哈希与视频指纹的三级筛选机制
算法·音视频·哈希算法
CHHH_HHH3 天前
【C++】哈希表原理与实战:从冲突解决到性能优化
开发语言·数据结构·c++·学习·算法·哈希算法·散列表
xieliyu.4 天前
Java数据结构:从0开始手搓Hash桶
java·数据结构·哈希算法