反馈

国密 SM2/SM3/SM4 加解密


签名 / 验签(被签名的内容是上面「输入」框里的文本)
国密运算全部在浏览器本地完成,密钥与数据不上传。相关: AES · SHA · RSA · 文字加解密 · Base64

📖 工具说明

1. 这个工具能做什么?

一个页面覆盖国家商用密码(国密)最常用的三种算法:顶部下拉切换 SM2 / SM3 / SM4,输入即算,结果一键复制。全部运算在浏览器本地完成,密钥、明文、密文绝不上传服务器。

算法 类型 用途 本工具支持
SM2 非对称(椭圆曲线 ECC) 加密 / 解密、密钥交换、数字签名。256 位强度约等于 RSA-3072 生成密钥对、由私钥推公钥、公钥加密、私钥解密,C1C3C2 / C1C2C3 两种密文排序;签名 / 验签(R‖S 或 DER 格式、可设 userId)
SM3 密码杂凑(Hash) 生成 256 位摘要,抗碰撞性优于 MD5 / SHA-1,常作为 SM2 签名的预处理 文本 SM3、带 Key 的 HMAC-SM3
SM4 对称分组加密 128 位分组 / 128 位密钥,用于文件、报文、信道加密 ECB / CBC 模式(PKCS#7 填充)、GCM 认证加密(可带 AAD,标签 8 / 12 / 16 字节),Hex 输出

2. 为什么开发中要用国密?

随着信创(信息技术应用创新)推进,SM 系列已是国内多数安全场景的法定标准:


3. 使用方法

SM2

  1. 没有密钥就点「生成」,得到 04 开头的 130 位十六进制公钥和 64 位私钥,私钥务必妥善保存。
  2. 加密:输入明文,粘贴公钥,选排序模式(默认 C1C3C2),点「加密」得到十六进制(Hex)密文。
  3. 解密:粘贴 Hex 密文,输入对应私钥,模式与加密时一致,点「解密」。
  4. 签名:在「输入」框填要签名的文本,填私钥,选签名格式(R‖S 128 位 Hex,或 Java / BouncyCastle 常用的 ASN.1 DER),点「签名」;验签时把签名粘进「签名值」框,填公钥,格式、userId、是否勾选「SM3 摘要(含 Z 值)」要与签名时一致,点「验签」。
  5. 只有私钥、缺公钥时,点「由私钥推出公钥」。

SM2 签名默认参数:勾选「SM3 摘要(含 Z 值)」是标准做法——先用 SM3 对「用户标识 + 公钥 + 原文」做摘要再签名;userId 默认 1234567812345678(GB/T 32918 的默认值)。对端 userId 不同、或用了不含 Z 值的方式,验签就会失败。

SM3

  1. 输入待计算的文本。
  2. 需要 HMAC 时在「HMAC Key」填十六进制密钥,留空即普通 SM3。
  3. 点「计算 Hash」,得到 64 位十六进制(256 位)摘要。

SM4

  1. 填 16 字节密钥(32 位十六进制,如 0123456789abcdeffedcba9876543210)。
  2. 选模式:ECB 直接可用;CBC 需再填 16 字节 IV(推荐 CBC + 随机 IV);GCM 需填 IV(建议 12 字节即 24 位 Hex),可选填 AAD(UTF-8 文本)和选标签长度。
  3. 输入明文点「加密」,或粘贴 Hex 密文点「解密」。

GCM 说明:加密结果 = 密文 ‖ 认证标签(Hex);解密时输入同样格式,标签不匹配(密钥 / IV / AAD 不对或数据被改)会直接报「认证失败」而不是输出乱码。同一密钥下 IV 绝不能重复,否则 GCM 的安全性会被破坏。本工具的 SM4-GCM 是在 SM4 分组加密之上自行实现的,已用 RFC 8998 的官方测试向量核对。


4. 常用参数对照

参数 规格 说明
SM2 私钥 32 字节 / 64 位十六进制 最高级别秘密,勿泄露
SM2 公钥 64 字节 / 130 位十六进制,04 开头 非压缩格式
SM2 密文排序 C1C3C2(新,默认)/ C1C2C3(旧) 与对端保持一致
SM3 摘要 256 位 / 64 位十六进制 定长,与 SHA-256 长度相同
SM4 密钥 16 字节 / 128 位 加解密唯一凭证
SM4 IV CBC:16 字节;GCM:任意长度,建议 12 字节 增加密文随机性
SM4 填充 ECB / CBC:PKCS#7;GCM:无填充 ECB / CBC 自动补齐到 16 字节整数倍
SM2 签名 R‖S:128 位 Hex;DER:以 30 开头 两种格式来回转换要注意

5. 常见问题

Q:结果和 Java BouncyCastle / GmSSL / OpenSSL 国密版对得上吗? A:本工具基于 sm-crypto 库,严格遵循 GM/T 标准。SM2 注意两端的密文排序(C1C3C2 / C1C2C3)要一致;SM4 注意模式、IV、填充方式一致;SM3 注意是否加了 HMAC Key。

Q:SM2 加密报错 / 解密结果为空? A:多数是密钥格式问题——公钥应为 04 开头共 130 位十六进制,私钥为 64 位十六进制。工具会提示不合法的长度与前缀。

Q:SM2 验签总是失败? A:依次检查:① 原文是否与签名时逐字节一致;② 签名格式(R‖S 还是 DER);③ userId 是否一致(默认 1234567812345678,有的系统用别的,甚至用空串);④ 是否都用了 SM3 摘要(含 Z 值)。OpenSSL 3.x 的很多命令默认的 SM2 用户标识与国标默认值不同,对接时要显式指定。

Q:SM3 是加密吗? A:不是。SM3 是单向杂凑(Hash),不可逆,用于完整性校验和签名预处理。需要可逆的国密加密请用 SM4(对称)或 SM2(非对称)。

Q:数据安全吗? A:三种算法的运算都在浏览器前端完成,页面加载后即使断网也能用,输入内容不会发送到任何服务器。

📖 了解原理

📖 相关推荐