首页 / 开发工具指南 / SM4 指南

SM4 分组加密算法完整指南

从历史背景到实际应用:一文掌握国密 SM4 的核心原理、32 轮迭代结构、ECB/CBC 等工作模式、密钥与 IV 管理、7 个真实使用场景、与 AES-128 的对比、实用技巧与数据安全建议。

📖 阅读时长约 10 分钟 📅 更新于 2026-06-20 ✍️ 土豆丝工具团队
🔐 立即试用 SM4 加解密工具
在线快速进行 SM4 加密与解密,支持 ECB/CBC 多模式切换、Hex/Base64 编码、结果复制与下载,所有操作在浏览器本地完成,保护您的数据隐私。
打开工具
#01

什么是 SM4?理解它的本质与历史地位

SM4(商用密码分组密码算法)由中国国家密码管理局在 2012 年发布(GM/T 0007-2012),是国密算法家族中的对称加密标准。它的分组长度与密钥长度均为 128 位,通过 32 轮非线性迭代完成加解密,加密与解密使用相同的算法结构(等价解密),仅轮密钥顺序不同。

作为国密体系的对称加密标准,SM4 的发布标志着中国在对称密码领域拥有了自主可控的国家标准。它的设计借鉴了 AES 的整体思想(SP 网络结构、分组密码、多轮迭代),但在具体的 S 盒、线性变换、轮函数上采用了完全不同的设计,以实现同等量级的安全强度。

经过十多年的公开应用与学术界审查,SM4 当前仍被视为安全:目前没有公开的实用攻击方法。它在 WAPI 安全协议、无线局域网鉴别、电子政务、金融 IC 卡、数据库字段加密、磁盘与文件加密、实时数据传输保护等场景中被广泛采用,是符合"等保 2.0"、金融级合规要求的首选国密对称加密算法。

我们的在线 SM4 工具保留了该算法的实用价值,同时为开发者提供一站式的在线加密解密与结果复制。

#02

SM4 的算法原理:32 轮迭代、S 盒与线性变换

SM4 的核心运算可以用一句话概括:将 128 位明文输入经过 32 轮非线性变换,最终产生 128 位密文。理解这一点对正确使用 SM4 至关重要。

具体步骤为:

  • 输入处理:128 位明文被拆分为 4 个 32 位字:X0, X1, X2, X3
  • 轮函数:每一轮执行 X[i+4] = X[i] ⊕ T(X[i+1] ⊕ X[i+2] ⊕ X[i+3] ⊕ rk[i]),其中 T 是合成变换(非线性 S 盒 + 线性变换 L),rk[i] 是轮密钥。
  • 非线性 S 盒:将 8 位输入通过一个固定的查表替换为另一个 8 位输出,提供混淆(Confusion)能力。SM4 的 S 盒基于有限域 GF(2^8) 构造,具有良好的差分均匀性和非线性度。
  • 线性变换 L:将 S 盒输出进行 32 位线性变换(循环移位 + 异或),提供扩散(Diffusion)能力,确保单个明文位的变化能影响多个密文位。
  • 密钥扩展:128 位主密钥通过与轮函数相同的合成变换 T' 和固定系统参数 FKCK 扩展出 32 个 32 位轮密钥 rk[0..31]
  • 迭代运算:共执行 32 轮轮函数,每一轮使用一个轮密钥。
  • 反序输出:将最后 4 个状态字反序拼接得到 128 位密文:Y = (X35, X34, X33, X32)
  • 解密:使用相同算法结构,仅需反转轮密钥顺序(从 rk[31] 到 rk[0])即可解密,这就是"等价解密"的含义。

理解这个结构后,你就能准确回答为什么 密钥长度固定为 128 位、为什么 ECB 模式每个分组独立加密、为什么 IV 在 CBC 模式中如此重要 等实际问题。

#03

工作模式与填充:ECB、CBC、PKCS7 的实际区别

SM4 本身只定义了如何对一个 128 位分组进行加解密。要加密更长的数据,需要配合分组密码工作模式。不同模式在安全性、实现复杂度、并行能力上各有取舍。

ECB(Electronic Codebook,电子密码本)

  • 每个 128 位分组独立使用相同密钥加密。
  • 优点:实现简单,可并行加密。
  • 缺点:相同明文分组 → 相同密文分组,不隐藏明文模式。攻击者可通过替换、重排分组发动攻击。
  • 不建议用于敏感数据加密。仅在数据块天然独立且不泄漏模式的场景中可用。

CBC(Cipher Block Chaining,密码块链接)

  • 每个明文分组在加密前先与前一个密文分组做异或,再加密。第一个分组与初始化向量 IV 异或。
  • 优点:隐藏明文模式(相同明文得到不同密文),安全性显著高于 ECB。
  • 缺点:加密不可并行(解密在某些实现下可并行),一个密文位错误会导致该分组完全错误且下一分组对应位出错。
  • 是目前最常用、最推荐的模式

PKCS7 填充

  • 当明文长度不是 128 位(16 字节)的整数倍时,需要填充使其成为整倍数后再加密。
  • PKCS7:缺少 N 字节 → 填充 N 个字节,每字节值均为 N。例如缺 3 字节则填充 0x03 0x03 0x03
  • 若明文恰好是 16 字节的整倍数,则额外填充 16 个字节(每个字节值为 16),以确保解密端能可靠去除填充。
  • NOPADDING(无填充):要求输入必须是 16 字节整倍数,否则会出错。适用于已对齐的数据。

编码方式方面,Hex(十六进制)便于人类阅读与调试;Base64 则更紧凑,适合在电子邮件、URL 参数等场景中传输。

#04

7 个真实使用场景:什么时候需要用到 SM4?

SM4 作为国密标准的对称加密算法,应用场景围绕 "需要合规 + 需要对称加密 + 需要高性能" 三个关键词展开。

① WAPI 与无线局域网鉴别

中国自主的无线局域网鉴别与保密基础结构(WAPI)中,SM4 是核心的对称加密算法,用于无线终端与接入点之间的会话保密。

② 金融 IC 卡与 POS 终端

在金融 IC 卡、移动支付终端中,SM4 用于交易报文加密、PIN 保护、敏感字段加解密,符合《中国金融集成电路(IC)卡规范》的国密要求。

③ 数据库字段加密

将身份证号、手机号、银行卡号等敏感字段在写入数据库前用 SM4 加密,即使数据库被拖库,攻击者也无法直接读取敏感信息。配合密钥管理系统(KMS)能实现更完善的数据脱敏。

④ 电子政务与公文传输

在政务系统中,敏感公文、数据传输通道常被要求使用国密算法。SM4 用于对传输中的内容进行对称加密,通常配合 SM2(非对称加密)、SM3(哈希)构成完整的国密密码栈。

⑤ 磁盘与文件加密

在需要对磁盘分区或单个文件进行加密保护的场景(如企业终端管理、数据防泄漏 DLP),SM4 提供高性能的对称加密能力,兼具合规性与安全性。

⑥ 实时数据传输保护(VPN / TLS 国产替代)

在国密改造的 VPN、SSL/TLS 网关中,SM4 作为握手完成后的会话加密算法承担大批量数据的对称加密任务。性能与 AES-128 接近,在国内网络安全产品中广泛部署。

⑦ 物联网设备数据加密

资源受限的物联网设备(如智能水表、智能门锁、工业传感器)需要轻量级加密算法,SM4 的 S 盒设计在硬件实现上非常高效,适合 ASIC/FPGA 或低功耗 MCU 场景。

简而言之:只要你需要对数据进行对称加密,且场景涉及中国国家标准、政务、金融、等保 2.0 要求,SM4 就是合规与安全的首选算法。

#05

SM4 vs AES-128:如何选择合适的对称加密算法

SM4 和 AES-128 是目前最主流的两种 128 位分组对称加密算法。它们在安全强度、运算性能、生态支持上各有特点。

安全强度对比

  • SM4:128 位密钥,128 位分组,32 轮迭代。目前无公开实用攻击方法。
  • AES-128:128 位密钥,128 位分组,10 轮迭代。经受了全球密码学界 20 多年的审查。
  • 结论:两者安全强度被认为在同一量级

运算性能对比

  • 软件实现:AES 在大多数现代 CPU 上有硬件指令集(AES-NI),单轮吞吐更高;SM4 没有专用指令集加持。
  • 硬件实现:SM4 的 S 盒结构对 ASIC/FPGA 非常友好,在国产芯片和国密加速卡上性能出色。
  • 结论:在主流 x86/ARM CPU 上 AES 更快;在国密专用硬件上 SM4 更有优势

生态与兼容性对比

  • AES:全球通用,几乎所有操作系统、浏览器、TLS 库、JDK、OpenSSL 等都原生支持。
  • SM4:主要在中国国内被要求使用,GM/T 规范系列已发布多年,在 GmSSL、Bouncy Castle 等库中获得支持。国际生态正在逐步建立。
  • 结论:AES 生态更成熟;SM4 在国内合规场景下是必需

实际选择建议

  • 场景涉及中国政务、金融、等保 2.0、国密改造 → 选择 SM4。
  • 场景主要面向国际市场、跨平台兼容、与国际标准对接 → 选择 AES。
  • 不确定时,可同时支持两种算法(双算法支持在国内产品中很常见)。
  • 无论选择哪种算法,都需要配合正确的工作模式(CBC 推荐)、合理的 IV 策略和安全的密钥管理。算法本身是安全的,但错误的用法可能使系统变得不安全。
#06

5 个实用技巧:避免踩坑,提升加密可靠性

① 优先使用 CBC 模式而非 ECB

ECB 模式相同明文得到相同密文,容易被模式分析攻击。CBC 模式能隐藏明文模式,安全强度显著更高。除非你明确知道 ECB 在你的场景下是安全的(极少见),否则应默认选择 CBC。

② 每次加密使用不同的 IV(且不可预测)

在 CBC 模式下,IV 不需要保密,但 必须唯一且不可预测。如果两个不同消息使用相同 IV,攻击者可推导出明文的异或关系。推荐使用密码学安全的随机数生成器生成 IV(16 字节)。

③ 密钥长度严格为 128 位(16 字节)

SM4 使用固定 128 位密钥。不要直接使用用户输入的密码作为密钥("password123" 强度远远不足)。应该使用密码学安全的伪随机数生成器(CSPRNG)生成,或通过 KDF(如 PBKDF2、HKDF)从密码派生。

④ 永远不要在代码或配置文件中硬编码密钥

硬编码密钥一旦被反编译、代码被泄露,整个系统就被攻破。正确做法是使用密钥管理系统(KMS)、硬件安全模块(HSM)、环境变量(仅在开发环境临时使用)等安全方式存储密钥。

⑤ 使用加密 + 完整性校验,而不仅仅是加密

仅加密不能防止密文被篡改。如果需要保证数据完整性和真实性,应在加密后附加消息认证码(如 HMAC-SM3),或使用能同时提供机密性和完整性的 AEAD 模式(如 GCM,若库支持)。

#07

数据安全与隐私:为什么选择本地处理的在线工具

使用在线加密工具的第一条原则是:密钥和明文绝对不应离开您的设备。本工具的所有 SM4 运算都在您的浏览器本地通过 JavaScript 完成,密钥、明文、密文都不会上传到任何服务器。

为什么本地处理如此重要?

  • 密钥是整个加密系统的根信任。一旦密钥泄漏,无论算法多强都无济于事。
  • 避免中间人攻击:如果数据通过网络传输,就存在被嗅探、被中间人替换的风险。
  • 符合最小披露原则:只有必须被传输的数据才应被传输。加密工具的输入输出是最敏感的数据。
  • 无服务器日志风险:云端工具可能记录您的请求参数、IP 地址、访问时间。

尽管本工具在本地运行,您仍需注意以下风险:

  • 不在公共计算机上处理敏感数据 — 浏览器的历史记录、剪贴板、自动保存功能可能泄露信息。
  • 不要通过电子邮件、即时通讯等未加密渠道分享密钥。
  • 优先使用强随机密钥而不是人类能记住的密码。
  • CBC 模式下每次加密使用不同的 IV,切勿重复。
  • 对于高度敏感的场景,可在断网环境下打开本页面后再进行操作(一旦下载完成,本页面可完全离线工作)。

综合来看,SM4 的价值在于"国产标准 + 与 AES-128 同级安全 + 良好生态兼容性"。只要您能正确选择保护隐私的本地工具,它就是开发者工具箱中值得信赖的一项。

立即使用土豆丝 SM4 在线工具 →