跳到主要内容
加解密工具

SM4 对称加解密工具

面向国密系统使用 SM4-CBC 或 SM4-ECB 加解密文本,并与 Hex、Base64 密文接口联调。

SM4 对称加解密区

密钥、IV、明文和密文只在当前浏览器中处理,不会上传或保存。

高级设置 CBC · PKCS7 · Hex
CBC 会使用 16 字节随机 IV 隐藏重复分组,但不提供认证;密文仍应配合独立 MAC。

密钥和 IV 接受连续 Hex、空格、冒号、字节 0x 前缀或整体 0x 前缀。

0 UTF-8 字节

Hex 密文结果

生成或输入 16 字节 SM4 密钥后,可以加密

固定密钥长度

SM4 密钥始终是 128 位;CBC 的 IV 固定为 16 字节。

严格填充

PKCS7 会严格校验每个填充字节;NoPadding 不自动补齐。

无认证模式

ECB 和 CBC 都不能检测篡改,生产协议应另加 MAC。

什么时候使用

适合对接明确要求国密 SM4 的接口、协议或已有系统。新协议如果没有国密合规要求,应优先选择带认证的 AES-GCM 或 ChaCha20-Poly1305。

快速使用

  1. 保持默认的 CBC + PKCS7 + Hex,点击“生成密钥和 IV”。
  2. 输入明文并执行加密。
  3. 保存密钥、IV 和密文;解密时使用完全相同的模式、填充与编码。

工具说明

这个工具使用 128 位 SM4 分组密码加解密 UTF-8 文本,支持:

  • 工作模式:CBC、ECB。
  • 填充:PKCS7、NoPadding。
  • 密文编码:Hex、标准 Base64。

页面默认使用 CBC + PKCS7 + Hex。可以在浏览器中同时生成新的 16 字节随机密钥和 CBC IV;输出是原始密文,不会把模式、填充或 IV 自动封装进去。

密钥、IV、明文和密文只在当前浏览器中处理,不会上传或保存。SM4 实现精确使用 [email protected]

参数说明

密钥

SM4 密钥始终是 128 位,也就是 16 字节。页面使用 Hex 输入,因此规范化后应包含 32 个十六进制字符。

IV

CBC 模式需要 16 字节 IV。IV 不要求保密,但同一密钥下加密不同消息时应使用新的随机 IV,并与密文一起保存。

ECB 模式不使用 IV。

密钥和 IV 的 Hex 输入接受整体 0x、按字节书写的 0x、空格和冒号;页面生成结果固定为连续小写 Hex。

密文编码

  • Hex:每个字节使用两个十六进制字符表示,适合协议字段和标准向量。
  • Base64:表示相同密文字节,通常更紧凑。

切换编码不会改变 SM4 算法本身。解密时必须选择与输入一致的编码。

Hex 密文也接受整体或按字节的 0x、空格和冒号;Base64 密文使用标准 Base64。

填充模式

PKCS7

PKCS7 会把明文补齐到 16 字节分组边界。即使明文已经是 16 的倍数,也会额外增加一个完整填充分组。

解密时页面严格检查每个 PKCS7 填充字节。错误密钥、IV、模式或被修改的密文通常会导致填充或 UTF-8 校验失败。

NoPadding

NoPadding 不增加也不移除字节,因此 UTF-8 明文字节数必须是 16 的倍数,密文字节数也必须是 16 的倍数。

NoPadding 不提供错误密钥检测。某些错误参数可能仍产生一段字节结果,因此调用方不能把“成功输出”当作认证通过。

模式选择

模式IV重复分组结构建议
CBC16 字节隐藏默认使用,但需要额外 MAC 检测篡改
ECB不使用暴露仅用于标准向量或兼容明确要求的旧系统

CBC 和 ECB 都不提供消息认证。生产协议应使用独立 MAC,或者采用已经定义认证机制的安全协议。

常见问题

为什么 SM4 只能使用 16 字节密钥?

SM4 标准固定使用 128 位密钥,不提供类似 AES-192 或 AES-256 的其他密钥长度。

为什么 NoPadding 加密中文容易报长度错误?

页面按 UTF-8 字节数检查分组,不按 JavaScript 字符数检查。中文和 Emoji 通常占多个 UTF-8 字节。

CBC 的 IV 可以复用吗?

同一密钥下不应复用 IV 加密不同消息。本工具生成随机 IV,但不会自动把 IV 封装进密文,需要自行一并保存。

为什么修改密文后有时仍能解密?

CBC 和 ECB 没有认证能力,不能可靠检测篡改。PKCS7 或 UTF-8 校验只能发现部分错误,不能代替 MAC。

密钥和内容会上传吗?

不会。随机参数生成、加密、解密和复制都在当前浏览器中完成。