Skip to content

报文安全处理规则 ​

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 密文签名生成;平台响应报文的签名由接入方使用平台公钥验证。

密钥交换流程 ​

  1. 接入方本地生成一对 RSA 密钥:私钥(merchantRsaPri)自留,公钥(merchantRsaPub)上传至平台。
  2. 平台将平台公钥(platRsaPub)下发给接入方。
  3. 此后:
    • 接入方用 merchantRsaPri 对调用签名 → 平台用 merchantRsaPub 验签
    • 平台用平台私钥对响应签名 → 接入方用 platRsaPub 验签

SaudiPays 报文安全处理

使用 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.pem

签名算法参数 ​

参数值
算法名称SHA256withRSA(Java)
OPENSSL_ALGO_SHA256(PHP)
密钥长度2048 位
密钥格式Java 使用 PKCS8
PHP 及其他语言使用 PKCS1
签名对象调用 Body 密文(即 aesBuffer 的值)