签名算法

开放平台支持RSA加密方式,对参数和响应体进行双向加密双向验证签名,这种方式对数据来说更加安全。使用这种加密方式请求开放平台您需要先了解以下内容。

公私钥作用

  • 甲方为 第三方业务调用方
  • 乙方为 ChainUp服务提供方

公私钥对作用: 甲方在后台创建应用时,需提前生成一对公私钥,其中公钥(rsa_third_pub)提供给乙方,私钥自己保管,私钥请勿透露给任何人。甲方在请求乙方提供的服务时,通过乙方的公钥来加密请求参数,并用甲方的私钥对MD5后的数据原文进行签名,乙方接受到请求时,通过乙方的私钥解密数据,并用甲方的公钥对MD5后的数据原文进行验签.

账号准备

开发者需要准备如下信息:

  1. 生成一对公私钥,将公钥通过后台创建应用提交到平台
  2. 第三方应用服务器IP (可选)

开发者需要保存的信息:

  1. 提交到平台公钥对应的私钥: rsa_third_pri ;
  2. 创建应用的唯一标识: app_id;
  3. 应用对应平台公钥: rsa_saas_pub;

RSA公私钥生成规则:

  • 密码长度: 2048
  • 密钥格式: PKCS#8

RSA公私钥生成地址(可选满足生成规则即可): RSA工具网站

接口规则

传输方式https
签名字段除了sign字段,其他所有必填项都需要参与签名
响应状态码0表示处理成功,非 0 表示请求错误或系统异常
请求地址域名+接口地址
加密算法Java 加解密Demo
加密工具类java 版本的加密工具类 其他开发语言可参考实现

接口调用方式

说明:下文中接口文档均使用ak、sk 的接口文档对接口进行说明。这里对rsa方式调用做统一说明。调用实例可参考 请求示例及响应体解密方式

除个别请求中不需要签名的接口外,接口都需要对参数和响应体做加密和验签处理。这里以创建订单的接口 /open/user/registerOrLoginToGetOpenApi 对接口调用方式进行说明。

使用ak/sk加密时 请求参数如下:

{
  "appKey": "xxxx",
  "countryCode": "+86",
  "mobileNumber": "34334342",
  "password": "1234qwer",
  "sign": "xxxxxxxxxxxxxxxxxxxx"
}

使用rsa 方式请求需要将以上参数进行加密和签名,其中 appKey和sign 不需要参与加密 将其他参数 进行加密和签名 得到 datasign字段。新的请求参数如下: 其中示例中的 oppositePublicKey是应用对应的平台公钥,myPrivateKey是开发者自己生成的RSA私钥。

{
  "app_id": "xxxx",
  "time": 1715310032,
  "data": "xxxxxxxxxxx",
  "sign": "xxxxxxxxxxx"
}

参数说明:

  • app_id 为ak/sk方式中的appKey参数
  • time 为请求时刻的毫秒时间戳
  • data 为加密后的参数
  • sign 为加密参数sign

返回的响应体

{
  "code": "0",
  "msg": "succ",
  "data": "xxxxxxxxxxx",
  "sign": "xxxxxxxxxxx"
}

响应体说明

  • code 为状态码
  • msg 为状态码说明
  • data 字段为返回的具体响应内容,需要用算法解密 解密示例
  • sign 字段为返回的签名由开发者的公钥和应用的私钥对data签名,需要算法验证签名,验证成功之后,可认为返回值是安全的 验证签名