什么时候使用
适合对接明确要求国密 SM2 公钥加密的系统。它不用于签名验签,也不处理证书、PEM 或 ASN.1 密文。
快速使用
- 保持默认 C1C3C2 和未压缩公钥,点击“生成密钥对”。
- 加密时保留公钥并输入明文;解密时粘贴密文和配套私钥。
- 保存私钥时不要与密文放在同一位置,也不要在不可信设备上处理生产私钥。
工具说明
这个工具使用 SM2 公钥加密、私钥解密 UTF-8 文本,提供两种常见的原始密文排列:
C1C3C2:默认选择,适合新系统和当前常见接口。C1C2C3:用于兼容仍采用旧排列的系统。
页面默认填入 04 未压缩公钥,用户也可以切换为 02/03 压缩公钥。密钥、C1 和密文都使用原始 Hex 表示,不使用 PEM、JWK 或 ASN.1 封装。
SM2 密钥生成、随机临时密钥、加密和解密全部在当前浏览器中完成,不会上传或保存。实现精确使用 [email protected],浏览器环境的随机数来自安全随机源。
密钥格式
公钥
加密支持两种十六进制公钥:
- 未压缩公钥:65 字节,以
04开头,后面依次是 32 字节 X 和 32 字节 Y。 - 压缩公钥:33 字节,以
02或03开头,后面是 32 字节 X。
生成密钥对时可以选择页面优先填入哪一种公钥。两种表示对应同一个椭圆曲线点,解密仍使用相同的 32 字节私钥。
公钥和私钥输入接受整体 0x 前缀以及复制时产生的空格、换行;输出统一为连续小写 Hex。
私钥
私钥固定使用 32 字节 Hex,并且数值必须位于 SM2 曲线的有效私钥范围内。私钥不会写入本地存储,刷新或关闭页面后无法恢复。
密文格式
页面输出原始 Hex 密文,不使用 ASN.1 封装:
04 || C1.x || C1.y || C3 || C2
或者在兼容模式下:
04 || C1.x || C1.y || C2 || C3
04 || C1.x || C1.y是 65 字节未压缩临时公钥点。C3是 32 字节完整性摘要。C2是加密后的正文,长度与 UTF-8 明文字节数相同。
部分 SM2 库会省略 C1 开头的 04。本工具统一输出带 04 的格式,解密同时接受带或不带 04 的密文。
密文输入同样接受整体 0x 前缀和空白字符,但不接受 ASN.1 DER、Base64 或带算法元数据的封装。
安全提示
- 每次加密都必须生成新的随机 C1,本工具会自动完成。
- SM2 公钥和私钥必须配套,密文排列也必须与加密端一致。
- C3 校验失败时,页面只返回统一的解密失败,不区分错误私钥、损坏密文或排列不一致。
- 不要在不可信设备上处理生产私钥。
常见问题
C1C3C2 和 C1C2C3 可以自动识别吗?
不能可靠自动识别。两种格式没有自描述字段,解密时必须选择加密端实际使用的排列。
压缩公钥会降低安全性吗?
不会。压缩格式只是省略可由 X 和奇偶标识恢复的 Y 坐标,表示的仍是同一个 SM2 公钥点。
为什么同样的明文和公钥每次密文不同?
SM2 加密每次都会生成新的随机临时密钥和 C1,这是正常且必要的安全属性。
支持 SM2 签名或证书吗?
当前页面只提供公钥加密和私钥解密,不包含签名验签、X.509 证书、密钥交换或 ASN.1 密文。
密钥和内容会上传吗?
不会。密钥生成、加密、解密和复制都在当前浏览器中完成。