国密联调最常见的问题,不是「算法完全不可用」,而是双方对输入、密钥格式、密文拼接顺序、编码和模式的理解有一个细节不一致。SM2、SM3、SM4 分别解决不同问题:SM2 负责公钥加密和签名验签,SM3 负责 256 位摘要与 HMAC, SM4 负责 128 位分组对称加密。把它们放在同一个页面里测试,可以更快判断问题出在算法选择、参数配置还是接口拼接。
什么时候需要国密在线联调
当项目涉及政务、金融、信创、等保改造或国产密码体系适配时,研发团队经常需要把前端、后端、网关、设备或第三方系统的加密结果对齐。 这类问题不适合只靠口头描述,因为「密钥是一致的」「签名串一样」往往只是感觉一致。更稳妥的做法,是用国密算法工具 把输入、密钥、模式、输出格式和结果逐项固定下来,再和服务端日志逐字节比对。
- 接口签名验签:确认原始签名串、SM2 私钥签名、公钥验签和输出编码是否一致;
- 字段加密解密:确认 SM2 密文顺序、SM4 模式、密钥长度、IV 和填充方式是否匹配;
- 完整性校验:确认 SM3 摘要或 HMAC-SM3 是否基于同一份原始输入;
- 协作复现:生成不含私钥和明文的分享链接,让后端、安全或测试同事复现配置现场。
先分清 SM2、SM3、SM4 的角色
很多联调卡住,是因为把三类算法混在一起讨论。SM2 是非对称密码算法,常见操作包括公钥加密、私钥解密、私钥签名和公钥验签。 SM3 是摘要算法,输出 256 位摘要;如果需要带共享密钥的消息认证,应使用 HMAC-SM3,而不是普通 SM3。SM4 是对称分组密码, 固定使用 128 位密钥,CBC 模式还需要 128 位 IV;ECB 不需要 IV,但真实业务里通常要谨慎评估是否适合。
| 能力 | 常见用途 | 排查重点 |
|---|---|---|
| SM2 加密解密 | 公钥加密 / 私钥解密 | 公私钥是否成对、密文顺序是否一致 |
| SM2 签名验签 | 私钥签名 / 公钥验签 | 签名串、编码、用户 ID 和摘要前置处理 |
| SM3 摘要 | 256 位哈希 | 原文、换行、JSON 顺序和字符编码 |
| HMAC-SM3 | 带密钥的消息认证 | 共享密钥、签名串拼接和大小写格式 |
| SM4 加解密 | 128 位对称加密 | 模式、密钥、IV、填充和 Hex/Base64 输出 |
一次可复现的国密联调流程
- 1先保存最小脱敏样例把手机号、证件号、订单号、token、真实密钥和生产证书替换成测试值,只保留能复现问题的字段。联调材料越小,越容易判断是哪一个字符导致结果不同。
- 2固定输入字节,而不是只看显示文本同一段文本如果末尾多一个换行、空格或不可见字符,SM3 摘要和签名结果都会变化。建议把原始签名串单独打印出来,再粘贴到工具中测试。
- 3确认密钥和输出格式SM4 常用 32 位十六进制字符串表示 16 字节密钥;接口字段可能使用 Hex、Base64 或 PEM 包装。必要时先用 Base64 编码解码 检查表达形式。
- 4按算法分别验证不要一次把签名、摘要、加密、网关转发全部混在一起排查。先让 SM3 摘要对齐,再验签;先让 SM4 本地加解密对齐,再接入接口传输。
- 5生成脱敏分享链接工具分享链接可以恢复算法、模式、公钥、SM3 输入和可分享结果,但不会写入 SM2 私钥、SM4 密钥、HMAC 密钥或解密明文。分享前仍要确认输入本身没有敏感信息。
- 6复杂场景再让 Pro AI 整理排查清单当你已经确认基础输入输出,但不知道下一步该查密钥管理、模式选择还是部署边界时,可以在 Pro 区域生成 AI 国密分析,再由安全或后端负责人复核。
SM2:加密解密和签名验签要分开看
SM2 的两个常见用途是加密解密和签名验签,它们经常使用同一套公私钥,但目标完全不同。加密链路里,发送方用公钥加密,接收方用私钥解密; 签名链路里,发送方用私钥签名,接收方用公钥验签。联调时如果把「私钥能不能解密」和「公钥能不能验签」混成一个问题,就很难定位。
密文顺序:C1C3C2 和 C1C2C3 要一致
SM2 密文常见拼接顺序包括 C1C3C2 和 C1C2C3。新实现通常优先使用 C1C3C2,但旧系统、设备 SDK 或历史接口可能仍使用 C1C2C3。 如果前端加密后后端无法解密,先不要急着换密钥,应先确认双方使用的密文顺序、输出格式和是否带有前缀。
签名验签:最重要的是原始签名串
验签失败时,密钥未必是第一嫌疑。更常见的是签名串拼接顺序不同、字段大小写不同、URL 编码不同、JSON 序列化顺序不同,或者末尾多了换行。 建议把参与签名的原始字符串作为排查对象,而不是只对比最后的签名值。
接口验签一直失败
- 1.把参与签名的字段缩小到 3 个以内,先在本地打印原始签名串,不要直接复制格式化后的 JSON。
- 2.在 国密算法工具 中选择 SM2 签名,粘贴测试私钥和原始签名串,生成签名。
- 3.用同一页面切换到验签,粘贴测试公钥、原始签名串和签名值,确认工具内能否通过。
- 4.如果工具内通过、接口失败,继续比对服务端收到的原始字符串、字符编码、URL 解码次数和签名字段大小写。
SM3 和 SM4:最容易被忽略的是输入边界
SM3 摘要结果只要输入字节不同,就会完全不同。联调中常见误差包括:复制时多了换行、JSON 字段顺序改变、中文编码不一致、时间戳参与签名、 HMAC 密钥来源不同。SM4 则更依赖参数一致性:ECB 和 CBC 不能混用,CBC 的 IV 必须一致,密钥必须是 16 字节,输出端还要约定 Hex 或 Base64。
- 普通 SM3 用于摘要,HMAC-SM3 用于带共享密钥的消息认证,不要混用;
- SM4 的 128 位密钥通常用 32 位十六进制字符串输入,CBC 模式还要提供 16 字节 IV;
- 如果密文看起来一样但接口解析失败,检查 Hex/Base64、大小写、换行和字段转义;
- 如果同样 JSON 算出的摘要不同,先固定序列化方式和字段顺序,再排查算法。
免费测试和 Pro AI 分析怎么配合
免费能力适合完成绝大多数基础验证:SM2 加密解密、SM2 签名验签、SM3 摘要、HMAC-SM3、SM4 ECB/CBC、本地历史和分享恢复。 Pro AI 分析更适合在「参数都试过,但仍不知道下一步该查什么」时使用。它不会接收私钥、SM4 密钥、HMAC 密钥或解密明文,而是基于当前算法、模式和脱敏摘要生成建议。
| 能力 | 免费版 | Pro |
|---|---|---|
| SM2 加解密和签名验签 | 支持 | 支持 |
| SM3 摘要与 HMAC-SM3 | 支持 | 支持 |
| SM4 ECB/CBC 加解密 | 支持 | 支持 |
| 本地会话历史 | 最近操作 | 最近操作 |
| 分享链接恢复 | 非敏感配置和结果 | 非敏感配置和结果 |
| AI 国密分析 | 生成选型、密钥管理和排查建议 |
升级 Pro,把国密联调现场整理成排查清单
PRO根据当前 SM2、SM3、SM4 场景的脱敏摘要,生成算法选型、密钥管理、部署风险和下一步联调动作,适合安全、后端和测试协作。
- 生成 2-4 条算法选型与联调动作
- 输出 1 份可复制的诊断摘要
- 整理密钥、IV、签名串和编码 4 类排查点
- 辅助后端、安全和测试同事复核
分享和留档要注意什么
国密联调材料通常包含比普通接口调试更敏感的内容。分享链接和截图都应遵循最小必要原则:只保留算法、模式、公开配置、脱敏输入和可公开结果。 私钥、对称密钥、HMAC 密钥、生产证书、客户明文和解密后的业务数据不应放入链接、聊天记录或工单附件。
- 分享前确认输入是否已经脱敏,尤其是 SM3 输入和原始签名串;
- 不要把生产私钥粘贴到任何协作材料中,测试也应使用临时密钥;
- 记录问题时优先写「算法、模式、输入摘要、错误现象、对照结果」,而不是粘贴完整秘密;
- AI 分析结果应作为排查草稿,涉及合规、架构和密钥托管的结论必须人工确认。
联调前检查清单
- 是否明确本次验证的是加密、解密、摘要、签名还是验签;
- 是否使用测试密钥和脱敏输入,没有粘贴生产私钥或客户明文;
- SM2 密文顺序、签名输出和公私钥来源是否双方一致;
- SM3 或 HMAC-SM3 的原始输入是否逐字符一致;
- SM4 的模式、密钥、IV、填充和输出格式是否逐项一致;
- 分享链接、工单和截图是否只包含可分享信息。
常见问题
SM2、SM3、SM4 可以互相替代吗?
SM2 加密成功但后端解不开,先查什么?
SM3 哈希和后端不一致怎么办?
SM4 的密钥和 IV 应该是多少?
分享链接会泄露私钥或明文吗?
Pro AI 国密分析能直接给合规结论吗?
从一个最小样例开始
如果你正在处理国密接口联调,先不要把完整业务请求全部搬进工具。复制一个最小脱敏样例,打开国密算法工具,按 SM2、SM3、SM4 的角色分段验证。 遇到编码或令牌字段时,可回到 在线工具集首页 查找Base64 编码解码 和JWT 解析工具 辅助排查;如果你还在梳理接口错误,可继续阅读JSON 格式错误排查指南。