Skip to main content
UFOZoo

SM4加解密工具 在线国密对称分组加密算法

SM4 加密工具,支持 128 位密钥生成、数据加密和解密。中国国密分组密码算法 GM/T 0002,支持 ECB 和 CBC 模式。

更新于 2026-08-16

相关工具

功能特性

  • 生成 SM4 密钥(128 位)
  • 使用 SM4 加密数据
  • 使用 SM4 解密密文
  • 支持 ECB 和 CBC 模式
  • 自动生成初始化向量(IV)
  • 中国国家标准 GM/T 0002
  • 快速对称加密
  • 适合大数据量加密
  • 十六进制密钥输入/输出

使用方法

  1. 1密钥生成:点击'生成密钥'创建随机 128 位 SM4 密钥。
  2. 2加密:输入明文、密钥,选择模式(ECB/CBC),点击'加密'。
  3. 3解密:输入密文、密钥,选择模式,点击'解密'。
  4. 4CBC 模式:需要初始化向量(IV)。点击'生成 IV'创建一个。
  5. 5ECB 模式:每个 128 位块独立加密,更快但可能暴露数据模式。
  6. 6CBC 模式:块与 IV 链接在一起,更安全,建议敏感数据使用。
  7. 7密钥和 IV 分开存储。CBC 模式中切勿使用相同的密钥+IV 组合。
  8. 8密钥和 IV 使用十六进制格式输入/输出。密钥为 32 个十六进制字符(128 位)。

常见问题

什么是 SM4?

SM4 是中国国家密码管理局于 2006 年发布的对称分组密码算法。它是中国国家密码标准(GM/T 0002)的一部分,使用 128 位密钥和 128 位分组。SM4 设计类似于 AES,提供相当的安全性和性能。

ECB 和 CBC 模式有什么区别?

ECB(电子密码本)独立加密每个 128 位块。速度快但可能暴露数据模式。CBC(密码块链接)在加密前将每个明文块与前一个密文块异或,提供更好的安全性。CBC 需要初始化向量(IV)。大多数应用使用 CBC。

SM4 与 AES 相比如何?

SM4 和 AES-128 都使用 128 位密钥和分组。SM4 使用 32 轮而 AES-128 使用 10 轮。性能相当,SM4 在某些平台上稍慢。两者都提供 128 位安全性。SM4 在中国政府和金融应用中强制使用,而 AES 是全球标准。

SM4 安全吗?

SM4 自 2006 年以来经过密码学家广泛分析。未发现实际攻击。它于 2011 年被纳入 ISO/IEC 18033-3,确认其国际认可。SM4 被认为密码学强度高,广泛应用于中国关键基础设施。

如何存储密钥和 IV?

密钥必须保密并安全存储。使用环境变量、密钥管理系统或硬件安全模块(HSM)。IV 不需要保密,但每次加密应唯一。在 CBC 模式下,切勿重复使用相同的密钥+IV 组合。

SM4 的分组大小是多少?

SM4 使用 128 位(16 字节)分组大小,与 AES 相同。数据按 128 位块分组后加密。如果明文长度不是 16 字节的倍数,SM4 会自动应用 PKCS#7 填充来补满剩余空间。解密时自动移除填充。

SM4 使用多少轮加密?

SM4 使用 32 轮加密,而 AES-128 使用 10 轮。每轮应用替换(S-box)、排列(线性变换)和密钥混合操作的组合。32 轮设计提供了充足的安全余量以抵抗密码分析攻击。

SM4 能用于文件加密吗?

可以,SM4 速度高,非常适合文件加密。对于大于分组大小(16 字节)的文件,密码模式(ECB 或 CBC)决定块的处理方式。建议文件使用 CBC 模式以防止模式泄露。十六进制输出可解码存储为二进制加密文件。

SM4 和 DES/3DES 有什么区别?

SM4 使用 128 位密钥、128 位分组和 32 轮,提供现代安全性。DES 使用 56 位密钥(目前已过弱)和 64 位分组。3DES 将安全性提升到 112 位,但明显更慢且仍使用 64 位分组。SM4 比 DES/3DES 更安全也更快。

SM4 符合国际标准吗?

符合。SM4 于 2021 年被纳入 ISO/IEC 18033-3 成为国际标准分组密码。它被 ISO 与 AES、Camellia 等其他主要密码共同认可。这意味着 SM4 可用于需要标准化密码算法的国际系统。

为什么 SM4 解密失败?

SM4 是固定 128 位分组的块密码,常见原因:密钥错误(任何一个字节不同都会破坏整个分组)、模式或 IV 不匹配(相同密钥下 CBC 与 ECB 产生不同的密文)、填充缺失或错误(标准是 PKCS#7)、以及传输中被修改或截断的密文。先确认两端的密钥、模式、IV 和填充完全一致。

为什么后端(Java/Python)生成的密文和这个工具的不一致?

SM4 的输出取决于四个必须双方一致的因素:加密模式(ECB 还是 CBC)、CBC 模式下的 IV、填充方式(标准是 PKCS#7),以及编码格式(密钥、IV、密文用十六进制还是 Base64)。任何一个不同(比如某库默认用 PKCS#5 填充,或输出 Base64 而本工具显示十六进制),密文就会完全不同。先核对这四项,再排查其他问题。

为什么用同一个密钥加密同样的明文,每次密文都不一样?

在 CBC 模式下,工具每次运行都会生成全新的随机 IV,所以相同密钥和明文每次产生不同的密文:这是安全特性而不是 bug:唯一的 IV 可防止相同明文块泄露模式。ECB 模式下相同输入始终产生相同输出。要复现之前的结果,请复用完全相同的密钥、IV、模式和填充。

不知道密钥的情况下,SM4 加解密算法能还原密文吗?

不能。SM4 加解密是 128 位分组密码,没有密钥还原密文意味着要暴力尝试最多 2^128 个密钥,以现有硬件不可能完成。SM4 加解密算法设计上只有持有密钥的人才能解密。一个诚实的提醒:SM4 加密在知道密钥时是可逆的,所以不要用它存储密码或可能被他人拿到密钥的机密,密码请用 bcrypt 或 Argon2 之类的密码哈希。

为什么在浏览器里对大数据做 SM4 加解密会很慢?

这里的 SM4 加解密完全在浏览器内的 JavaScript 中运行,JS 通常比原生 C 库慢 2-5 倍,所以几 MB 以上的输入会明显耗时:好处是数据永远不会离开你的设备。大文件建议使用本地工具(带 SM4 provider 的 OpenSSL、GmSSL 或国密库);如果必须在线做 SM4 加解密,请分块加密或缩小输入规模。