SM3 和 SHA-256 有什么区别?国密哈希与 NIST 哈希的对比与选择
一句话结论
SM3 和 SHA-256 安全强度同级(都输出 256 位摘要),技术选型上可以互换;真正的分界线还是合规——国密场景必须 SM3,国际场景默认 SHA-256。
基本面对比
| 维度 | SM3 | SHA-256 | |---|---|---| | 标准归属 | 中国 GM/T 0004-2012 / GB/T 32905-2016 | 美国 NIST FIPS 180-4 | | 摘要长度 | 256 位 | 256 位 | | 分组长度 | 512 位 | 512 位 | | 结构 | Merkle-Damgård(64 轮迭代) | Merkle-Damgård(64 轮迭代) | | 安全强度 | 128 位(抗碰撞) | 128 位(抗碰撞) | | 已知攻击 | 无实际威胁 | 无实际威胁(理论碰撞约 2^128 工作) | | 硬件加速 | 国密芯片/密码卡 | CPU SHA-NI 指令(极快) |
两者结构同源(都是 Merkle-Damgård 迭代),轮函数设计不同——SM3 的消息扩展和压缩函数是独立设计,经过全国密码算法设计竞赛打磨。密码学上两者目前都没有被实际攻击的先例。
标准测试向量(联调必备)
SM3("abc") = 66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0
SM3("") = 1ab21d8355cfa17f8e61194831e81a8f22bec8c728fefb747ed035eb5082aa2b
SHA-256("abc") = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
联调对不上时,先用在线 SM3 工具算一遍 abc——和上面一致说明你的实现没问题,问题在传输编码(UTF-8 vs GBK、hex 大小写、有没有带换行符)。
性能差异
纯软件实现两者速度接近(SM3 略慢 10-20%)。关键差异在硬件加速:现代 x86/ARM CPU 有 SHA-NI 指令集,SHA-256 走硬件能快 5-10 倍;SM3 的硬件加速在国内的密码卡、TEE 环境里有。高吞吐场景(每秒上万次哈希)在通用服务器上 SHA-256 有实际性能优势,在国密硬件环境里 SM3 反超。
HMAC 构造是通用的
HMAC 的构造不依赖具体哈希算法(密钥填充 + 两次哈希):
HMAC-SM3 = HMAC(K, m) 用 SM3 作底层
HMAC-SHA256 = HMAC(K, m) 用 SHA-256 作底层
国密 TLS(TLCP 协议)里的伪随机函数、密钥派生都用 HMAC-SM3;JWT 的 HS256 用 HMAC-SHA256。算法替换时 HMAC 层代码不用改,换个底层函数即可。
什么时候必须 SM3
- 等保 2.0 三级及以上:密码算法要求使用国密套件(SM2/SM3/SM4)
- 政务系统:电子签章(GB/T 38540)、电子证照用 SM3 做摘要
- 金融:人行《金融数据安全 数据安全分级指南》推动国密落地
- 电子合同/存证:司法链、公证处对接普遍要求 SM3 摘要
什么时候用 SHA-256
- 国际互操作(Git commit hash、Bitcoin、TLS 证书链)
- 已有系统无合规压力,改造成本大于收益
- 依赖硬件 SHA 加速的高吞吐场景
常见坑
- 编码不一致:中文输入的 UTF-8/GBK 编码差异导致摘要对不上——联调先统一编码
- hex 大小写:SM3 输出习惯小写,部分 Java 库输出大写,比较时先 lowercase
- SM3 和 SM3-HMAC 混淆:裸哈希和带密钥的 HMAC 是两回事,接口文档要分清
排查清单
- 合规要求 → SM3;国际互操作 → SHA-256
- 联调对不上 → 先用
abc测试向量隔离定位 - 中文输入 → 确认两端编码一致(UTF-8)
- 高吞吐 → 通用服务器 SHA-256 有硬件优势,国密硬件里 SM3 反超
- HMAC 场景 → 构造通用,替换成本在底层函数
本文由 ToolVault 工具匣 提供。相关工具:SM3 哈希计算器、SM2 加解密与签名、SM4 加解密、哈希校验工具。相关阅读:SM2 和 RSA 怎么选、国密算法入门指南。访问 首页 查看更多开发者工具。
相关工具
相关文章
SM2 和 RSA 怎么选?国密椭圆曲线与国际公钥算法的完整对比
SM2 和 RSA 的选型对比:安全强度换算(256 位 SM2 ≈ 3072 位 RSA)、性能差异(签名验签各有优势)、密钥长度、C1C3C2 与 C1C2C3 密文格式兼容坑、国密合规要求(等保/政务/金融),附在线 SM2 工具实操验证方法。
国密算法入门:SM2/SM3/SM4/SM9/ZUC 是什么、谁在用、怎么落地
国密算法(商用密码)入门指南:SM2 公钥、SM3 哈希、SM4 分组密码、SM9 标识密码、ZUC 祖冲之序列密码的定位与用途,国密套件与 TLS 的关系(TLCP 协议),等保合规要求,以及开发者如何用在线工具理解算法行为。
JWT 解码后提示 signature invalid / 验签失败,正常吗?
JWT 解码后提示 signature invalid 或验签失败正常吗?区分"解码"与"验签"两个动作,讲清失败的常见原因,并告诉你什么时候该看内容、什么时候才需要真正验签。