主题
报文加解密及签名
AES 加密 / 解密
请求 Body 使用 AES 对称加密,加解密双方使用相同密钥。
算法参数
| 参数 | 值 |
|---|---|
| AES 密钥 | 平台下发给商户(32 位) |
| 初始化向量(IV) | 16 个 0(即 0000000000000000) |
| 加密模式 | AES-256-CBC |
| 输出格式 | Base64 |
加解密流程
加密:Body 明文 → AES-256-CBC(密钥 + IV) → Base64 密文(aesBuffer)
解密:Base64 密文 → AES-256-CBC 解密(密钥 + IV) → Body 明文1
2
2
加密 Demo 见 附录 - 测试信息及 Demo
RSA 签名 / 验签(SHA256withRSA)
Header 中的 signature 字段由商户使用 RSA 私钥对请求 Body 密文签名生成;平台响应报文的签名由商户使用平台公钥验证。
密钥交换流程
- 商户本地生成一对 RSA 密钥:私钥(
merchantRsaPri)自留,公钥(merchantRsaPub)上传至平台。 - 平台将平台公钥(
platRsaPub)下发给商户。 - 此后:
- 商户用
merchantRsaPri对请求签名 → 平台用merchantRsaPub验签 - 平台用平台私钥对响应签名 → 商户用
platRsaPub验签
- 商户用

使用 OpenSSL 生成 RSA 密钥
shell
# 1. 生成 2048 位私钥
openssl genrsa -out key.pem 2048
# 2. 转换为 PKCS8 格式(Java 使用此格式作为签名私钥)
openssl pkcs8 -topk8 -inform PEM -in key.pem -outform PEM -nocrypt
# 3. 导出对应公钥
openssl rsa -in key.pem -pubout -out public.pem1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
签名算法参数
| 参数 | 值 |
|---|---|
| 算法名称 | SHA256withRSA(Java)OPENSSL_ALGO_SHA256(PHP) |
| 密钥长度 | 2048 位 |
| 密钥格式 | Java 使用 PKCS8 PHP 及其他语言使用 PKCS1 |
| 签名对象 | 请求 Body 密文(即 aesBuffer 的值) |
签名 Demo 见 附录 - 测试信息及 Demo
