主题
报文安全处理规则
AES 加密 / 解密
调用 Body 使用 AES 对称加密,加解密双方使用相同密钥。
算法参数
| 参数 | 值 |
|---|---|
| AES 密钥 | 平台下发给接入方(32 位) |
| 初始化向量(IV) | 16 个 0(即 0000000000000000) |
| 加密模式 | AES-256-CBC |
| 输出格式 | Base64 |
加解密流程
加密流程:Body 明文经 AES-256-CBC(密钥 + IV)处理后,输出 Base64 密文并写入 aesBuffer。
解密流程:读取 Base64 密文后,使用相同密钥和 IV 执行 AES-256-CBC 解密,得到 Body 明文。
RSA 签名 / 验签(SHA256withRSA)
Header 中的 signature 字段由接入方使用 RSA 私钥对调用 Body 密文签名生成;平台响应报文的签名由接入方使用平台公钥验证。
密钥交换流程
- 接入方本地生成一对 RSA 密钥:私钥(
merchantRsaPri)自留,公钥(merchantRsaPub)上传至平台。 - 平台将平台公钥(
platRsaPub)下发给接入方。 - 此后:
- 接入方用
merchantRsaPri对调用签名 → 平台用merchantRsaPub验签 - 平台用平台私钥对响应签名 → 接入方用
platRsaPub验签
- 接入方用
使用 OpenSSL 生成 RSA 密钥
按以下顺序生成私钥、转换 Java 可用的 PKCS8 私钥格式,并导出对应公钥:
shell
openssl genrsa -out key.pem 2048
openssl pkcs8 -topk8 -inform PEM -in key.pem -outform PEM -nocrypt
openssl rsa -in key.pem -pubout -out public.pem1
2
3
2
3
签名算法参数
| 参数 | 值 |
|---|---|
| 算法名称 | SHA256withRSA(Java)OPENSSL_ALGO_SHA256(PHP) |
| 密钥长度 | 2048 位 |
| 密钥格式 | Java 使用 PKCS8 PHP 及其他语言使用 PKCS1 |
| 签名对象 | 调用 Body 密文(即 aesBuffer 的值) |
