一个页面覆盖国家商用密码(国密)最常用的三种算法:顶部下拉切换 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 输出 |
随着信创(信息技术应用创新)推进,SM 系列已是国内多数安全场景的法定标准:
SM2
C1C3C2),点「加密」得到十六进制(Hex)密文。R‖S 128 位 Hex,或 Java / BouncyCastle 常用的 ASN.1 DER),点「签名」;验签时把签名粘进「签名值」框,填公钥,格式、userId、是否勾选「SM3 摘要(含 Z 值)」要与签名时一致,点「验签」。SM2 签名默认参数:勾选「SM3 摘要(含 Z 值)」是标准做法——先用 SM3 对「用户标识 + 公钥 + 原文」做摘要再签名;userId 默认 1234567812345678(GB/T 32918 的默认值)。对端 userId 不同、或用了不含 Z 值的方式,验签就会失败。
SM3
SM4
0123456789abcdeffedcba9876543210)。GCM 说明:加密结果 = 密文 ‖ 认证标签(Hex);解密时输入同样格式,标签不匹配(密钥 / IV / AAD 不对或数据被改)会直接报「认证失败」而不是输出乱码。同一密钥下 IV 绝不能重复,否则 GCM 的安全性会被破坏。本工具的 SM4-GCM 是在 SM4 分组加密之上自行实现的,已用 RFC 8998 的官方测试向量核对。
| 参数 | 规格 | 说明 |
|---|---|---|
| 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 开头 | 两种格式来回转换要注意 |
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:三种算法的运算都在浏览器前端完成,页面加载后即使断网也能用,输入内容不会发送到任何服务器。