SM4 国密对称加密(ECB / CBC)

用国密 SM4 分组密码对文本做加解密。SM4 是 GB/T 32907-2016 规定的商用分组密码,分组长度和密钥长度都是 128 位,国内政务、金融、能源类系统里常见。这个页面支持 ECB 与 CBC 两种模式、PKCS#7 与不填充两种填充方式,密钥和 IV 可以直接写文本,也可以用 [HEX]: 前缀粘贴一串十六进制原始字节;明文与密文两侧都能选 UTF-8、GBK、UTF-16LE、Base64、Hex,方便对接老系统或跟别人的实现互相验证。加解密全程在浏览器本地完成。

工具界面在页面加载完成后显示在本段下方,可以直接使用。所有计算都在你的浏览器本地完成,输入的内容不会上传到服务器。

SM4 国密对称加密(ECB / CBC)能做什么

用国密 SM4 分组密码对文本做加解密。SM4 是 GB/T 32907-2016 规定的商用分组密码,分组长度和密钥长度都是 128 位,国内政务、金融、能源类系统里常见。这个页面支持 ECB 与 CBC 两种模式、PKCS#7 与不填充两种填充方式,密钥和 IV 可以直接写文本,也可以用 [HEX]: 前缀粘贴一串十六进制原始字节;明文与密文两侧都能选 UTF-8、GBK、UTF-16LE、Base64、Hex,方便对接老系统或跟别人的实现互相验证。加解密全程在浏览器本地完成。

怎么用SM4 国密对称加密(ECB / CBC)

  1. 在「加解密参数」里选分组模式:CBC 需要再填 16 字节 IV,ECB 不用 IV
  2. 选填充方式:一般用 PKCS#7;只有明文长度本来就是 16 字节整数倍、且对方也约定不填充时才选「不填充」
  3. 填密钥,16 字节。手里是 32 位十六进制时,写成 [HEX]: 开头直接粘进去,比在下面切编码更不容易错
  4. 选明文编码和密文表示:中文文本用 UTF-8,从老系统复制来的报文可能是 GBK,密文建议保持 Base64 或 Hex
  5. 在「加密」页输入明文,密文实时出现在下方,点「拿去解密」可以立刻反向验证一遍
  6. 解密时把密文贴进「解密」页,确认模式、填充、密钥、IV 与加密方完全一致即可

示例

输入:

明文「国密 SM4 加密测试:你好,世界」,密钥 [HEX]:0123456789abcdeffedcba9876543210,IV [HEX]:000102030405060708090a0b0c0d0e0f,CBC + PKCS#7

输出:

N6ke7rBQ7WdGQRLM4X739oYELQMTw/bRDF/tvPxgdz/4M92ZtJd/aZ9jfNEtGFXy

CBC 配固定 IV 是确定性的:同样的明文、密钥、IV 每次都会得到这段密文,可以拿它对照自己的实现。

使用技巧与注意点

常见问题

为什么解密提示「填充校验不通过」?

这个报错几乎都意味着密钥不对、IV 不对,或者模式选错了(对方是 ECB 而你选了 CBC)。SM4 分组解密不会校验口令,只有当解出来的末尾字节不符合 PKCS#7 的填充规则时才会被判定失败,所以它其实是「参数不匹配」的信号。

[HEX]: 前缀是干什么的?

它声明「后面这串是原始字节的十六进制表示」,与字符集下拉框无关。比如 [HEX]:0123456789abcdeffedcba9876543210 就是 16 个字节,不会被当成 32 个字符的文本。前缀后面只允许十六进制字符和空白,出现别的字符会直接报错并指出是哪个字符 —— 否则密钥录错了也照样能加密,只是对方永远解不开。

能不能解密 Java / OpenSSL 生成的 SM4 密文?

可以,前提是参数对齐:模式(CBC 还是 ECB)、填充(PKCS#7 还是不填充)、密钥字节、IV 字节四项都要一致。Java 的 BouncyCastle 默认是 SM4/CBC/PKCS7Padding,密钥按字节数组传,这时代码里把密钥写成 [HEX]: 后面跟同样的十六进制最稳妥。

密钥用中文可以吗?

可以,但要知道它会先按你选的编码变成字节。一个汉字在 UTF-8 里占 3 字节、在 GBK 里占 2 字节,所以「八个汉字」在 GBK 下正好 16 字节、在 UTF-8 下是 24 字节(会被截成 16)。跨系统对接时用十六进制密钥最不容易出岔子。

SM4 和 AES 该用哪个?

面向国内合规要求的系统用 SM4(国密算法有明确的政策与行业规范要求),面向国际或跨境的系统用 AES。两者都是 128 位分组密码,安全强度在同一量级,选哪个主要看合规与对方系统支持什么。

明文和密钥会上传吗?

不会。SM4 计算全部在你的浏览器里跑,没有任何网络请求,关掉页面就什么都不剩。

相关工具

同类加密与解密工具

查看全部加密与解密工具