跳到主要内容
← 返回

SM4 加解密工具 - 国密分组密码在线加密解密

安全
本地运行 · 不上传

在线 SM4 国密分组密码加解密:支持 ECB/CBC 模式、PKCS#7 填充、密钥随机生成与显隐切换。16 字节密钥 128 位分组,等价 AES-128 的国密替代。浏览器本地运行,密文不外传。

结果有帮助吗?

本地工具可在 DevTools → Network 搜索输入内容,通常不会出现在请求中。

使用指南

SM4 是国密分组对称加密(对标 AES),密钥和输出都是 128 位。国产系统改造里的数据加密通常指定它。本工具在浏览器本地完成加解密——明文和密钥全程不出本机,适合联调时快速验证密文能否对上。

1. 怎么用

  1. 输入明文和 SM4 密钥(16 字节,常用 32 位十六进制;可带 0x / 空格)。
  2. 选择模式(ECB / CBC;CBC 必须填 16 字节 IV,缺省会报错)。
  3. 选择密文编码(hex 或 Base64),与对端约定一致后再加密 / 解密。

2. 和对端对不上时的排查顺序

  • 先核对密钥:长度(16 字节)、格式(hex vs utf8 直填)、前后空格 / 0x。
  • 再核对模式与 IV:ECB 无 IV;CBC 的 IV 必填且与加密端一致(本页缺 IV 直接报错)。
  • 最后核对密文编码:本页可选 hex / Base64,三方约定必须一致。

3. 一个模式选择的常识

ECB 模式因为相同明文块产出相同密文块(泄漏结构特征),只应用来测试对接正确性;真实业务应使用 CBC 或更安全的模式,并让 IV 每次随机。联调时对不上密文是常态——先看密钥再看模式最后看编码,这个顺序能排除 90% 的对接失败。SM4 与 AES-128 强度相当,选择同样由合规要求决定。

4. 什么场景必须 SM4,AES 什么时候还行

判断标准只有一条:对端/合规要求。等保、密评、政务金融行业规范点名的加密模块必须用国密算法族,此时数据加密就是 SM4(GB/T 32907),AES-128 再强也不合规。反之,没有合规要求的中外混合系统里,AES 仍是最大公约数——强行给不要求国密的链路套 SM4 只会缩小可用的客户端生态。灰色地带(比如产品要同时卖国内外)的做法是算法可配置:一套代码,按部署地选择 SM4 或 AES,密钥管理层保持同构。

5. 对接 SM4 接口的检查单

  • 密钥格式:16 字节——对端给的是 32 位 hex 还是 24 位 base64(18 字节解码,注意不是 16)?先确认再解析。
  • 模式与 IV:ECB 无 IV;CBC 的 IV 是 16 字节且两端必须一致,不少实现对 IV 用固定值(等于变相 ECB)。
  • padding:PKCS#7 是默认约定,也有实现规定明文必须手动补齐到 16 字节整(padding=None),错一个字节全文对不上。
  • 密文编码:hex(64 字符/块)还是 base64——肉眼能分,但要当成接口契约确认,别靠猜。
  • 第一次联调先跑标准测试向量:固定密钥 + 固定明文,两端各加密一次,比对密文。向量都对不上的问题一定在格式约定层,不在算法层。

6. 标准号谱系:GM/T 0002、GB/T 32907 与 RFC 8998 的关系

SM4 的身份演变是国密算法的典型路径:2006 年算法公开,2012 年以行业标准 GM/T 0002-2012 定名,2016 年升级为国家标准 GB/T 32907-2016,2017 年进入国际标准 ISO/IEC 18033-3:2017(与 AES 同列分组密码附录)。看到这三个号,说的是同一个算法。国际协议侧,RFC 8998(2021)把 SM2/SM3/SM4 组合定义为 TLS 1.3 的 ShangMi(SM)密码套件——握手用 SM2、密钥导出用 SM3、记录层用 SM4-GCM/CCM。本页验证的是算法层的 ECB/CBC(联调密钥与编码),不是 ShangMi 记录层 GCM,也不能代替 TLCP 握手。完整号表见[《标准号速查》](/blog/sm-standard-numbers-explained),选型见[《国密算法入门》](/blog/guomi-algorithms-guide);密钥交换与签名见 [SM2](/tools/sm2-encrypt),摘要见 [SM3](/tools/sm3-hash)。

7. 本页模式边界:ECB/CBC,不是 GCM

工具支持 ECB 与 CBC(CBC 必须提供 16 字节 IV),填充为 PKCS#7,密文可选 hex/Base64。RFC 8998 的 TLS_SM4_GCM_SM3 / CCM 套件以及部分网关的国密 HTTPS,记录加密走的是带认证的 GCM/CCM——与本页 CBC 密文不互通。联调应用层 SM4-CBC 接口时用本页;验收 ShangMi TLS 时请在协议栈侧抓握手套件名(可用 [HAR 查看器](/tools/har-viewer)),不要用本页密文当套件证据。联调清单亦可对照[《SM2/SM3/SM4 实战》](/blog/sm-crypto-practical-guide)。

常见问题

定位相同:都是分组密码。SM4 分组/密钥固定 128 位(对标 AES-128),AES 支持可选密钥长度。选择只看一条——对端与合规要求:等保、密评、政务金融点名的加密模块必须用 SM4;无合规要求的系统里 AES 仍是最大公约数,同时面向国内外的产品可做成算法可配置。性能上硬件加速的 AES 更快,SM4 在国密硬件(密码卡/芯片)中也有加速。

联调与业务数据优先用 CBC(每次随机 IV):ECB 对相同分组输出相同密文,会泄露数据模式(经典企鹅图案例),只适合连通性测试;还要防对端把 IV 写成固定值——那等于变相 ECB。CBC 缺 IV 时本工具会直接报错,不会静默用空向量。

128 位密钥的 32 位十六进制字符串(如 0123456789abcdeffedcba9876543210)。CBC 模式还需要 32 位 hex 的 IV(缺 IV 会直接报错)。可点「生成密钥」用浏览器安全随机源生成。密钥可带 0x 前缀或中间空格,工具会先规范化再运算。联调对不上时按「密钥 → 模式/IV → 编码」的顺序排查,能排除大部分对接失败。

页面可选 hex(默认)或 Base64,加解密两端与对端约定必须一致。同一明文同一密钥下,两种编码只是同一密文字节的不同写法;拿 hex 去解 Base64(或反过来)会失败。padding 也是要确认的契约:PKCS#7 是默认约定,个别实现要求明文手动补齐到 16 字节整(padding=None),错一个字节全文对不上。

本页仅支持 ECB/CBC + PKCS#7,用于应用层联调。RFC 8998 定义了 TLS 1.3 的 ShangMi 套件——握手用 SM2、密钥导出用 SM3、记录层用 SM4-GCM/CCM,与本页 CBC 密文不互通,协议握手请在国密 TLS 栈侧验证。标准号谱系:SM4 在 2012 年定为行业标准 GM/T 0002-2012,2016 年升为国标 GB/T 32907-2016,2017 年进入 ISO/IEC 18033-3:2017,三个号说的是同一个算法。

加解密全部在浏览器本地完成,明文与密钥全程不出本机。本页定位是学习验证与短数据联调(几 KB 内);大文件加密请分块或用专门的加密库,超长文本在浏览器 UI 里会卡顿。

相关工具

相关文章