SM4国密在线加密解密

格式:
原文编码:
密文编码:

处理结果

SM4国密加密工具使用指南

SM4是中国国家密码管理局制定的对称分组密码算法,作为国家密码标准(国密算法)的重要组成部分。本工具提供专业的SM4在线加密解密服务,支持CBC、ECB两种加密模式,提供智能密钥生成、多种编码格式支持、文件导入导出等功能,为政务、金融、企业系统提供符合国密标准的加密解决方案。

核心功能详解

🇨🇳 国密标准合规

完全符合《SM4分组密码算法》(GB/T 32907-2016)国家标准,适用于各类国密合规场景。

CBC模式示例:
输入:国密算法测试
密钥:1234567890abcdef (16字节)
IV:fedcba0987654321 (16字节)
输出:Base64编码的密文

应用场景:政务系统、金融机构、企业应用的国密合规加密

🔑 128位固定密钥

SM4算法采用固定的128位(16字节)密钥长度,安全性与AES-128相当。

  • 密钥长度:固定16字节(128位)
  • 分组长度:固定16字节(128位)
  • 支持Text/Hex/Base64三种密钥格式
  • 随机密钥生成器
  • 密钥格式实时验证
  • IV自动生成功能

🔐 双模式加密

支持CBC和ECB两种加密模式,其中CBC模式安全性更高,推荐使用。

  • CBC模式:需要IV,安全性高(推荐)
  • ECB模式:无需IV,实现简单
  • Pkcs7填充:自动数据对齐
  • 多种编码支持
  • 跨平台兼容

📁 文件处理支持

支持文本文件的导入导出功能,便于批量处理和数据管理。

  • 支持多种文本格式导入
  • 加密结果一键导出
  • UTF-8编码支持
  • 大文件处理能力
  • 批量文本加密

使用步骤

1

选择加密模式并输入数据

选择SM4加密模式(推荐使用CBC模式),在编辑器中输入要加密的文本,或点击"导入文本文件"加载文档内容

2

设置加密密钥和IV

在密钥输入框中输入16字节的SM4密钥,或点击"生成密钥"自动生成。CBC模式需要设置16字节的IV(初始化向量)

3

执行加密或解密

点击"加密"将文本转换为SM4密文,点击"解密"将密文还原为明文。右侧显示处理结果和详细统计信息,可复制或导出

SM4国密算法详解

SM4是中国国家密码管理局于2012年发布的分组密码算法,于2016年成为国家密码行业标准(GB/T 32907-2016),2021年成为国际标准(ISO/IEC 18033-3:2010/Amd 1:2021)。SM4算法的密钥长度和分组长度均为128位(16字节),采用32轮非线性迭代结构,安全性与AES-128相当,是中国商用密码算法体系的核心算法之一。

SM4 技术特点

🇨🇳 国家标准

符合GB/T 32907-2016国家标准,已纳入ISO/IEC国际标准。是中国政务、金融等领域强制使用的商用密码算法,具有法律效力

🔒 安全可靠

经过国家密码管理局严格评估,采用32轮Feistel结构,抵御差分攻击、线性攻击等多种密码分析方法,安全性与国际主流算法相当

⚡ 性能优异

算法结构简洁高效,支持硬件加速。在CPU、嵌入式设备、智能卡等多种平台上都有良好的性能表现,适合资源受限环境

🌐 广泛支持

主流国产密码库均已支持SM4算法,如GmSSL、Tongsuo等。各种编程语言都有成熟的实现,跨平台兼容性好

SM4 加密模式详解

CBC (Cipher Block Chaining) - 推荐

特点:每个明文块与前一个密文块异或后再加密

优势:最常用的模式,安全性高,相同明文产生不同密文

要求:需要16字节的初始化向量(IV),IV必须是随机且不可预测的

填充:使用Pkcs7填充(sm-crypto库固定实现)

适用场景:文件加密、数据库字段加密、通用数据加密、政务系统

ECB (Electronic Code Book) - 谨慎使用

特点:最简单的模式,每个块独立加密

优势:实现简单,支持并行处理,无需IV

缺陷:安全性较低,相同明文产生相同密文,无法隐藏数据模式

填充:使用Pkcs7填充(sm-crypto库固定实现)

适用场景:随机数据加密、对安全性要求不高的场景

SM4 与 AES 对比

相同点

  • 都是分组密码算法
  • 分组长度都是128位
  • 安全性水平相当(SM4 ≈ AES-128)
  • 支持多种加密模式(CBC、ECB等)
  • 都经过国际密码学专家验证

不同点

  • 密钥长度:SM4固定128位,AES支持128/192/256位
  • 加密轮数:SM4固定32轮,AES为10/12/14轮
  • 算法结构:SM4是Feistel结构,AES是SPN结构
  • 标准制定:SM4是中国标准,AES是美国/国际标准
  • 应用范围:SM4主要用于中国,AES全球通用

SM4 应用场景

🏛️ 政务系统

电子政务、政府信息系统、公文流转系统等政务领域的数据加密,符合国家密码应用要求

🏦 金融行业

银行系统、支付系统、证券交易、金融数据传输等金融领域的国密合规加密

📱 移动支付

支付宝、微信支付等移动支付应用中的敏感信息加密保护

🏢 企业应用

需要国密合规的企业信息系统、OA系统、ERP系统等商业应用

🔐 数据库加密

数据库敏感字段加密,如用户隐私、身份信息、财务数据等

📡 通信加密

即时通讯、视频会议、VPN等通信应用的数据传输加密

📄 文件加密

政府文件、企业文档、个人隐私文件的加密存储

🌐 物联网

智能设备、工业控制系统、智慧城市等物联网场景的数据加密

SM4加密最佳实践

国密合规要求

📋 适用场景

根据《商用密码应用安全性评估管理办法》,关键信息基础设施、重要网络和信息系统应当使用商用密码保护,包括政务、金融、电信、能源等领域

🔐 密钥管理

密钥应由符合国家标准的密钥管理系统生成和管理,不得使用简单密码。密钥应定期更换,通常建议每6-12个月更换一次

🏛️ 检测认证

用于关键领域的SM4实现应通过国家密码管理局认证,使用经过商用密码产品认证的密码模块或密码服务

📚 标准遵循

严格遵循GB/T 32907-2016《信息安全技术 SM4分组密码算法》等国家标准,确保算法实现的正确性和安全性

密钥和IV使用规范

✅ 密钥使用规范

  • 密钥必须是随机生成的16字节数据
  • 不要使用简单字符串或可预测的密钥
  • 使用密码学安全的随机数生成器(CSPRNG)
  • 密钥应安全存储,避免硬编码
  • 定期更换密钥(建议6-12个月)
  • 密钥传输时应使用安全通道(如SM2加密)

✅ IV使用规范

  • IV必须是16字节长度
  • 每次加密使用新的随机IV
  • IV可以公开,但不能重复使用
  • IV与密文一起存储或传输
  • ECB模式不需要IV
  • CBC模式必须使用IV

跨语言兼容性

常用SM4实现库

JavaScript:

  • sm-crypto(本工具使用)- 轻量级国密算法库
  • gmssl - 完整的国密算法套件

Java:

  • Bouncy Castle - BC Provider
  • 国密Java库 - 各厂商提供

Python:

  • gmssl - Python国密库
  • pycryptodome - 支持SM4

Go:

  • github.com/tjfoc/gmsm - Go国密库

兼容性注意事项

  • 确保使用相同的加密模式(CBC/ECB)
  • 填充方式必须一致(Pkcs7)
  • 密钥和IV的编码格式要统一
  • 注意不同库的默认参数差异
  • 测试时使用已知测试向量验证
  • 密文编码格式要保持一致(Base64/Hex)

常见问题与解决方案

❓ SM4与AES哪个更安全?

从纯技术角度看,SM4和AES-128的安全性相当,都能抵御当前已知的各种密码攻击。选择依据主要是合规性要求:中国的政务、金融等关键领域必须使用SM4等国密算法,而国际应用通常使用AES。两者都是经过严格验证的安全算法。

❓ 为什么SM4只支持128位密钥?

SM4设计时考虑了安全性和性能的平衡。128位密钥(2^128种组合)已经足以抵御当前和可预见未来的所有暴力破解攻击。固定密钥长度简化了算法实现,提高了硬件加速效率,特别适合资源受限的嵌入式设备和智能卡。

❓ 如何在Java中使用SM4?

Java中使用SM4需要引入Bouncy Castle密码库。添加依赖后,通过Cipher.getInstance("SM4/CBC/PKCS7Padding", "BC")创建加密器。注意Java的标准库默认不支持SM4,必须使用第三方密码库。确保密钥和IV长度都是16字节,与JavaScript等其他语言保持一致。

❓ SM4加密后数据变大多少?

由于Pkcs7填充的需要,加密后数据长度是16字节的整数倍。最多增加16字节(一个分组)。例如15字节明文会填充到16字节,17字节明文会填充到32字节。使用Base64编码后,数据会再增大约33%(4/3倍)。

❓ 国密改造需要注意什么?

国密改造是系统工程,需要考虑:1)选择符合国家标准的密码产品;2)建立完整的密钥管理体系;3)改造现有加密接口和存储;4)兼容性测试和数据迁移;5)通过密评(商用密码应用安全性评估)。建议聘请专业的密码服务机构指导实施。

安全建议

⚠️ 避免常见错误

  • 不要使用ECB模式加密敏感数据
  • 不要重复使用相同的IV
  • 不要使用弱密钥或简单字符串
  • 不要在客户端JavaScript中存储密钥
  • 不要使用未经认证的密码库
  • 不要忽略密钥的安全管理

✅ 推荐安全实践

  • 优先使用CBC模式
  • 每次加密生成新的随机IV
  • 使用密码学安全随机数生成器
  • 建立完善的密钥管理体系
  • 使用通过国密认证的密码产品
  • 定期进行安全审计和密评
  • 结合SM3实现消息认证

相关国密算法

SM2 - 非对称加密

基于椭圆曲线的公钥密码算法,用于数字签名、密钥交换、加密解密。可用于保护SM4的密钥传输

SM3 - 哈希算法

密码哈希算法,生成256位摘要。常与SM4结合使用,如HMAC-SM3进行消息认证

SM9 - 标识密码

基于身份的密码算法,可使用标识(如邮箱、手机号)作为公钥,简化证书管理

ZUC - 序列密码

流密码算法,主要用于移动通信(4G/5G)的数据加密和完整性保护