← 返回加密工具箱
SM4 国密加密指南:与 AES 的区别、合规场景与密钥格式
加密工具箱 · 使用教程
SM4 是中国自主设计的对称加密算法。过去它只出现在政务、金融这类“必须合规”的场景里,现在越来越多普通系统也开始用。这篇文章讲清楚它是什么、和 AES 有什么不同、为什么密钥要写成 32 位十六进制。
一、SM4 是什么
SM4 是国家密码管理局在 2012 年发布的商用密码算法,属于**分组密码**,和 AES 是同一类东西:
| 项目 | SM4 | AES |
| 分组长度 | 128 位(16 字节) | 128 位(16 字节) |
| 密钥长度 | 固定 128 位 | 128 / 192 / 256 位 |
| 轮数 | 32 轮 | 10 / 12 / 14 轮 |
| 结构 | 非平衡 Feistel | SPN(代换-置换网络) |
| 标准来源 | 中国国密标准 | 美国 NIST 标准 |
| 安全性 | 128 位强度 | 128/192/256 位强度 |
两者分组长度和密钥长度相同,**在纯技术层面安全强度相当**。SM4 没有“比 AES 更强”,它的意义在于自主可控和合规。
二、为什么会有国密
核心原因是**供应链安全**。AES 由美国 NIST 制定,如果完全依赖它,就意味着关键基础设施的加密能力建立在别人的标准之上。国密体系(SM2 非对称、SM3 哈希、SM4 对称)是中国给出的替代方案。
哪些场景必须用国密
- 金融行业:人民银行相关规范对银行卡、支付报文有明确要求
- 政务系统:各级政府信息化项目普遍要求国密改造
- 等级保护测评:等保 2.0 三级以上,密码应用有专门测评项
- 关键信息基础设施:能源、交通、水利等行业
- 国企/央企采购:招标文件里常直接写明“须支持国密算法”
如果你是给这些客户做系统,SM4 不是“可选优化”,而是**准入条件**。
普通互联网业务(比如一个工具站、一个电商 App)并不强制要求国密,用 AES 完全没问题。国密的必要性来自合规,不是技术优劣。
三、密钥为什么写成 32 位十六进制
这是使用 SM4 时最常见的困惑。原因是:**SM4 的密钥必须是正好 16 字节**。
16 字节 = 32 个十六进制字符
例如:0123456789abcdeffedcba9876543210
↑ 每两个字符 = 1 字节,共 32 字符 = 16 字节 ✓
为什么用十六进制而不用普通字符串?因为十六进制**没有字符集歧义**。
如果用字符串当密钥,比如 "1234567890abcdef",它转换成字节时依赖字符集:
- 纯 ASCII 字符在 UTF-8 和 GBK 下字节相同,暂时没歧义
- 但一旦密钥里出现中文或特殊字符,不同字符集下字节数就不同了
十六进制表示则完全确定:"0a" 永远是一个字节 0x0A,跨语言、跨平台都一致。
四、SM4 的模式
和 AES 一样,SM4 只加密 16 字节的块,长数据要靠模式串联。常用的还是那几种:
| 模式 | 说明 |
| ECB | 相同明文块产生相同密文块,泄露数据模式,不要用于生产 |
| CBC | 需要 IV,串行处理,最常用 |
| CTR | 需要计数器,可并行,适合大文件 |
ECB 的问题和 AES-ECB 完全一样:加密一张图片,轮廓依然可见。
另外,SM4 本身只定义分组算法,**模式、填充、IV 的处理方式在国标里另有规定**。做合规对接时,不要自己想当然,一定要问清楚对方用的是哪个国标文件、哪种模式、IV 怎么传——不同实现之间不兼容是常态。
五、怎么用本站工具
- 打开加密工具箱的 SM4 标签页
- 密钥填 32 位十六进制(16 字节)
- 输入明文点「加密」,得到十六进制密文
- 解密时密钥必须与加密时完全一致
计算在浏览器本地完成,密钥不会离开你的电脑。
六、常见问题
- SM4 比 AES 安全吗?
- 不是。两者都是 128 位分组、128 位密钥,理论安全强度相当。SM4 的价值在于自主可控和合规准入,不在于“更强”。说“国密更安全”是营销话术,说“国密是合规必需”才是准确表述。
- 密钥填 16 个普通字符行不行?
- 看具体工具的实现。本站要求 32 位十六进制,因为这样字节数确定、无字符集歧义。如果你对接的系统接受字符串密钥,务必确认它内部用的是 UTF-8 还是 GBK——这是国密对接最常见的坑之一。
- SM4 和 SM2、SM3 是什么关系?
- 它们是国密体系里三个不同用途的算法,不能互相替代:
SM2 — 非对称加密/签名(对应 RSA/ECDSA)
SM3 — 哈希算法(对应 SHA-256)
SM4 — 对称加密(对应 AES)
- 为什么我的 SM4 密文和对方算出来的不一样?
- 按概率排序:模式不同(ECB vs CBC);填充方式不同(PKCS#7 vs 无填充 vs 零填充);IV 不同或没传;密钥字节解释方式不同(hex 字符串 vs 原始字符串)。国密对接失败九成出在这四项。
- 做等保测评一定需要 SM4 吗?
- 等保 2.0 的密码应用要求是分级的,并非所有系统都要求国密,具体取决于系统等级和行业要求。稳妥做法是看测评机构的意见书。但如果是金融、政务类项目,基本可以默认需要。
- SM4 的性能比 AES 差吗?
- 纯软件实现下 SM4 通常略慢于 AES,因为 AES 在现代 CPU 上有专门指令集加速(AES-NI),而 SM4 的硬件加速支持较少。对绝大多数业务来说这个差异可以忽略;如果是高吞吐场景,选型时要做压测。