彩虹易支付的MD5秘钥和RSA对接说明
彩虹易支付对接:MD5 与 RSA‑2 签名两种方式讲解
彩虹易支付接口对接一共支持两种签名校验方式:MD5密钥签名 和 RSA2非对称公私钥签名,两种方式都可以完成支付请求、回调验签,安全性、使用场景有明显区别。
| 对比项 | MD5 密钥签名方式 | RSA2(RSA‑2)非对称签名 |
| 密钥形式 | 通信双方共用同一个通信密钥(key) | 商户私钥、平台公钥;两套密钥分开使用 |
| 签名原理 | 请求参数按照规则排序拼接字符串,拼接密钥后做MD5哈希得到sign签名 | 商户使用自己私钥生成请求签名;使用平台公钥校验回调返回数据 |
| 安全等级 | 一般,密钥泄露则全部请求可被伪造 | 高,私钥自己保管,只对外暴露公钥;即使公钥泄露无法伪造签名 |
| 使用难度 | 简单,绝大多数程序直接支持,代码实现简单 | 偏高,需要处理密钥生成、格式转换,部分老旧程序不支持 |
| 适用场景 | 个人测试、快速对接、二次开发程序、简单业务 | 正式商业生产环境、对安全要求高的业务 |
| 回调验签 | 同样使用同一密钥进行MD5校验 | 用彩虹易支付平台公钥校验回调的sign签名 |
一、MD5签名方式说明
工作流程
- 在彩虹易支付后台获取商户ID + MD5通信密钥。
- 业务系统组装请求参数,过滤空参数,按键名ASCII升序排序。
- 参数拼接成键=值&格式字符串,末尾拼接
&key=你的密钥。 - 对拼接后的完整字符串做MD5运算得到sign签名,随同参数一起提交给支付接口。
- 支付平台收到参数后,使用同样规则重新计算签名对比sign,校验请求合法性。
- 支付完成异步回调,同样带上sign,程序使用同一个密钥再次验签。
⚠️ MD5签名风险点
- 密钥一旦泄露,攻击者可以伪造支付请求、伪造异步回调,模拟订单成功。
- 密钥需要同时存放在你的业务程序和支付平台两边。
- 适合测试、小型业务;不建议高流量正式业务使用。
二、RSA2(RSA‑2)非对称签名方式说明
密钥概念
- 商户私钥:自己本地保存,绝对不能泄露;用于生成请求签名,传给彩虹易支付。
- 商户公钥:提交上传到彩虹易支付后台,平台用来校验你发起的请求。
- 彩虹易支付平台公钥:从后台复制保存到你的程序;用于校验平台推送过来的异步回调数据。
- 平台私钥:保存在支付服务商,商户拿不到。
工作流程
- 本地生成RSA2公私钥对,商户公钥填写到彩虹易支付商户后台。
- 发起支付请求:业务参数排序处理,使用商户私钥对参数进行RSA2签名,生成sign。
- 接口提交参数+sign给到彩虹易支付;平台拿你上传的商户公钥验证签名。
- 用户完成付款,平台回调你的业务地址;平台使用平台私钥生成回调sign。
- 你的程序使用彩虹易支付平台公钥校验回调sign,确认回调真实有效。
✅ RSA2优势
- 私钥只保存在自己服务器,不需要提交给支付平台;就算公钥泄露,攻击者无法伪造签名。
- 就算回调接口被人访问,没有平台私钥就无法构造合法sign,无法伪造成功订单。
- 生产环境强烈推荐RSA2方式对接。
三、对接选型建议
| 场景 | 推荐签名方式 |
| 本地调试、测试对接、二次开发简单程序 | MD5,上手快,调试方便 |
| 正式上线运营、有资金交易、对外商业服务 | 必须 RSA2,安全性更高 |
| 旧源码程序仅支持MD5,没有RSA实现 | 只能MD5,注意做好服务器密钥保护,不要泄露key |
四、常见踩坑问题
- 签名失败:参数排序错误,带空值参数,参数大小写不一致,换行空格导致RSA密钥格式异常。
- MD5与RSA不可混用:MD5对接就用MD5密钥验签;RSA对接就使用公私钥,不要交叉使用。
- RSA密钥格式:注意PKCS#8、PKCS#1格式,PHP开发经常遇到密钥格式报错。
- 异步回调验签:RSA模式回调不能拿商户私钥验签,必须使用平台公钥。
声明:本文档来源于互联网公开资料整理,仅供开发学习参考,实际以彩虹易支付官方开发文档为准。
阅读:9
发布时间: