clientEncryptionPublicKey 加密业务 JSON,并返回密钥指纹和 Base64 编码的 RSA 密文;接入方使用与该公钥配对的私钥完成解密。仅限受控的服务端环境。 不要在浏览器、移动端、前端脚本或 不受信任的终端中保存、传输或使用解密私钥。解密后的业务数据均应按敏感数据处理,不得写入应用日志、错误追踪、Apifox 报告或长期存储。下文卡示例中的 PAN、CVV 和有效期尤其不得记录或外泄。
| 项目 | 值 |
|---|---|
| 平台加密公钥 | API Key 配置中的 clientEncryptionPublicKey |
| 接入方解密私钥 | 与 clientEncryptionPublicKey 配对、仅由接入方持有的私钥 |
| RSA 密钥长度 | 2048 bit |
| 加密算法 | RSA-OAEP |
| OAEP 摘要 | SHA-256 |
| MGF | MGF1,摘要为 SHA-256 |
| OAEP Label | 空值 |
| 密文编码 | Base64;解码后固定为 256 字节 |
| 明文编码 | UTF-8 JSON |
| 示例私钥格式 | PKCS#8 PEM:-----BEGIN PRIVATE KEY----- |
keyFingerprint 用于让接入方确认当前密文对应哪一把客户端加密公钥。clientEncryptionPublicKey 配对。它与 API 请求签名使用的 clientSigningPublicKey 是两个用途;除非接入方明确为两种用途配置了同一密钥对,否则不要使用签名私钥解密。{
"success": true,
"data": {
"keyFingerprint": "SHA256:<64 位小写十六进制字符>",
"encryptedPayload": "<Base64 编码的 RSA 密文>"
}
}{
"pan": "<12 至 19 位卡号>",
"cvv": "<3 至 4 位安全码>",
"expiryMonth": 12,
"expiryYear": 2028
}200 且响应中的 success 为 true。expectedFingerprint 应来自接入方可信配置,不能直接使用同一响应里的值作为期望值。四段代码均以 Reveal Sensitive Card 的 keyFingerprint、encryptedPayload 和卡字段校验为例;接入其他加密接口时,应替换响应取值和业务字段校验,不能改变接口声明的密码学参数。phpseclib 3:PublicKeyLoader::loadPrivateKey($privateKeyPem, $password) 加载,口令同样应由密钥管理系统提供。OAEPParameterSpec。部分 Java Provider 对 MGF1 的默认摘要设置不同,仅在算法名称中写 OAEPWithSHA-256 不能充分表达本接口要求的 MGF1-SHA-256。cryptography:password=None 改为从密钥管理系统读取的 bytes 口令。node:crypto:oaepHash: 'sha256' 同时指定 OAEP 和 MGF1 使用 SHA-256。若私钥有口令,请在传给 privateDecrypt 的同一个选项对象中增加 passphrase 字段。| 现象 | 常见原因 | 处理方式 |
|---|---|---|
keyFingerprint 不匹配 | 使用了错误的 API Key、加密私钥或密钥版本 | 根据可信配置选择与 clientEncryptionPublicKey 配对的私钥 |
| OAEP 解密失败 | 私钥不匹配;库默认使用 SHA-1;MGF1 摘要不是 SHA-256;密文损坏 | 显式设置 OAEP-SHA-256、MGF1-SHA-256 和空 Label |
| Base64 解码后不是 256 字节 | 响应被截断、复制错误或不是 RSA-2048 密文 | 不要继续解密,检查原始响应传输链路 |
| 解密成功但 JSON 解析失败 | 参数不一 致、密文损坏或解密的不是本接口负载 | 拒绝处理,不要把原始明文写入日志 |
Reveal Sensitive Card 示例接口返回 SLASH.REMOTE_ERROR | 上游卡服务请求失败,尚未进入本地解密阶段 | 按接口响应中的请求标识排查服务端日志 |
rsa_private_key。不要提交、共享或导出包含真实私钥的环境。pm.response.setBody(plaintext))会使明文进入 Apifox 结果和测试报告。对于本文的卡敏感信息示例,这还会直接暴露 PAN 和 CVV。只可在已授权、隔离且报告不会留存或共享的临时调试中使用;常规测试应删除该语句,只断言解密成功和字段格式。