Skip to content

加密及签名规范

除网关支付业务外,其他业务使用的加密及签名规范。

原则

  1. 交易报文传输都需要进行加密解密、签名验签处理。

  2. 无论是请求端还是响应端接收到报文后,都需要进行签名验证,即按照约定算法重新生成签名,然后和收到的签名进行对比,对比通过后才能进行报文内容的解析,否则报文或文件内容可能出现篡改、部分丢失、伪造的问题。

  3. 报文加密算法:国际 DES/CBC/PKCS5Padding,国密 SM4/CBC/PKCS7Padding

  4. 会话密钥生成:KeyGenerator方法,参考demo;国际8个字节,国密16个字节

  5. 会话密钥加密算法:国际 RSA/ECB/PKCS1Padding,国密 模式C1C3C2

  6. 签名算法:国际 SHA1withRSA,国密 ASN1编码(R+S)

密钥对生成

  1. 对于商户来说,需要生成自己的RSA/SM2密钥对(包含公钥和私钥),其中私钥合作方自己保留,同时把公钥提供给平台,私钥注意保密
  2. 对于平台来说,需要为每个商户生成对应的公私钥对,其中私钥平台自己保留,公钥需要提供给商户。
  3. 密钥生成工具,请查看 “商户测试准备事项/上线准备阶段 章节”

加密及签名

  1. 对请求报文JSON明文(UTF-8编码)使用发送方的私钥进行签名(RSA/SM2),并将签名结果转换为HEX字符串,得到 sign 域。
  2. 根据demo中的方法,生成随机密钥key,DES的密钥8字节,SM4的密钥16字节
  3. 使用密钥key对JSON明文进行加密(DES/SM4),并将加密结果转换为HEX字符串,得到 msg_enc 域。
  4. 使用接收方公钥对会话密钥SK加密(RSA/SM2),并将结果转换为HEX字符串,得到 key_enc 域。

RSA请求流程

流程图

SM2请求流程

流程图

解密及验签

  1. 对响应报文字符串分隔(分隔符:&),获得merchant_id=、msg_enc=、key_enc=、sign=域的16进制数据
  2. 将key_enc域转换为二进制byte数组,使用接收方放的私钥对会话密钥,得到明文key字节;
  3. 将msg_enc与转换为二进制byte数组,使用上一步得到的会话密钥key解密,得到明文data;
  4. 使用上一步解密得到的明文data、发送方公钥和sign域数据验证签名的有效性。

RSA响应流程

流程图

SM2响应流程

流程图