DevKit源码

SM2 加解密与签名

国密 SM2 加解密与签名验签,公私钥与密文格式可选。

密文顺序
密文编码
未执行SM2 加密C1C3C2

04 开头非压缩 130 位,或 02/03 开头压缩 66 位(Hex),且必须位于 SM2 曲线上

明文(UTF-8 文本)
字符 0字节 0行 0
加密结果

填写公钥后点击「加密」。密文 = C1(64 字节,不含 04 前缀)|| C3(32 字节 SM3 摘要)|| C2(与明文等长), 顺序由「密文顺序」决定。

示例数据与格式说明(node + sm-crypto 真实生成并验证)

示例密钥对(本地生成,仅用于测试)

  • 公钥(04 非压缩 130 位):04153365094222d65b0733da2de3515b7a45c58eaacf7f8a77da497ec2a5edf7c2d4cb0636be80c3b18b32229044734b0b8d5a50be7eba40b450f60d3b667e5aed
  • 私钥(64 位):2ee6ca8da15004e8a98324f0dc8abf2be01b2d9ff9236fcf25301fc641ae5371

加解密示例(C1C3C2 / Hex)

  • 明文:你好,DevKit!SM2 国密非对称加密。
  • 密文(node 真实计算,已验证可解密回原文):709ae8c0ea961093b7f31f7a4b7675733baa95ebb1b9bdc3ad8b9a5fc630f3c8…(点击「解密示例」载入完整密文)

SM2 加密每次使用新的随机数 k,同一明文重复加密会得到不同密文(均可用同一私钥解密),因此「加密示例」现场计算的结果 与上方 node 密文不同是正常且正确的。 密文 Hex 不含 04 前缀:C1 直接以 x 坐标开头(前 128 位),C3 为 64 位 SM3 摘要,C2 与明文字节等长。

签名示例(raw r||s / DER,userId = 1234567812345678)

  • 原文:DevKit SM2 签名验签示例文本
  • raw 签名(已验证验签通过):c6638f4749d35e688af204c50499bc105db2b404912972e02a3091eae63246be97ba81878c328c525befe1a6aaea137bc5fb8be60533b5a47581e21f6d7fe766
  • DER 签名(已验证验签通过):304502200da4e0319a1d962ac318e004ab21d0004b3b47a215986b80042b57c40f3f8e7e022100f8a49d13cf175c14386fab79ce01763b140ea2efd168821c8a50dd9f20dc59aa

签名包含随机数 k,同一原文重复签名结果不同;「签名示例」现场计算,可与上方向量互相验证格式与流程。

什么时候用「SM2 加解密与签名」

对接国密改造的系统,需要生成或校验 SM2 的加密结果与签名。

使用要点

  • 支持加解密与签名验签,公私钥与密文格式(C1C3C2 / C1C2C3 等)可选。
  • 签名结果可与服务端返回值对照,定位格式或编码差异。
  • 私钥只在当前页面使用,不会上传。

相关工具

SM2 加解密与签名与其他 44 个工具一样,全部计算都在你的浏览器里完成:输入、密钥与文件不会发送到服务器,页面首次加载后可离线使用。