# 接口加密方案

最新更新时间:2021.11.25

接口约定

开放平台对外接口在安全性上面,有以下要求:

  • 所有上行接口都以HTTPS的形式访问。
  • 接口遵守Restful风格定义,采用UTF-8编码。所有访问API都需要进行身份认证RSA2签名,关于accessKey和签名验签具体流程可以看签名算法章节。
  • 私钥使用未加密的PEM(Privacy-Enhanced Mail)编码的PKCS#8格式。

签名算法

开放平台会自动为每个开发者生成一组accessId和accessKey,是用于API访问系统的身份认证信息。accessId相当于账号名称可以显示出来,accessKey相当于接入密码需要妥善保存。

请求通用参数

参数名 示例 说明
access_id 3401040030003465 开发者唯一标识
sign_type RSA2 固定传RSA2
time_stamp 1631602583000 请求时间,Linux时间戳,单位毫秒
sign 签名结果
data json 使用BASE64编码的JSON数据

接口签名示例

以下以停车场余位上传接口为例描述加解密过程。加密前的请求如下:

私钥:

-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANp8QfPRPoIjP9qR
4sIXFxRHDKYkai72QH7rWbwEyDjgwc+vxoJZxZpskwezVcEXlFy6c7ZXseIszy7s
vOQqzvnGWXKkyLVBcP3Za3gAXsK/+dm4ecxOdj2L2ZMm2sK4lwhoRJrHZWPR3F+w
4sIXFxRHDKYkai72QH7rWbwEyDjgwc+vxoJZxZpskwezVcEXlFy6c7ZXseIszy7s
RqEF5YslFzcSHxjj4Q3weVEsSI1KhcR4LLv5uS1URNFTZb4HrsmTAkEA4fDcVCo/
GnFSN20rXiEMqC7iIlcyS8E5Cx/fp0qKEZAARSpxLgkRNZn/zotgTgrBT24VCnQM
RqEF5YslFzcSHxjj4Q3weVEsSI1KhcR4LLv5uS1URNFTZb4HrsmTAkEA4fDcVCo/
GnFSN20rXiEMqC7iIlcyS8E5Cx/fp0qKEZAARSpxLgkRNZn/zotgTgrBT24VCnQM
juzLlBLkYdupaA==
-----END PRIVATE KEY-----

参数信息:

{
  "total": 100,
  "surplus": 35
}

(1)计算出{"total": 100,"surplus": 35}对应的Base64编码:

eyJ0b3RhbCI6IDEwMCwic3VycGx1cyI6IDM1fQ==

请求Body变为:

{
  "access_id": 3401040030003465,
  "sign_type": "RSA2",
  "time_stamp":1631602583000,
  "data": "eyJ0b3RhbCI6IDEwMCwic3VycGx1cyI6IDM1fQ=="
}

(2)按照JSON对象的健值首字母递增排序,拼接出字符串

3401040030003465eyJ0b3RhbCI6IDEwMCwic3VycGx1cyI6IDM1fQ==RSA21631602583000

对以上字符串进行RSA签名并进行Base64输出:

2j9R91P6Uz/dhEeE98ajDjWWbpcmfrLAjlQVT6wfHq1zM/rG/eetEdUJu+TBXloNnMuWlAL1zd5vfCTXKRbPY8SnH3lrq8mx316lCRRe406ynTOE6TSz6ebakwdGOmRIka0bjuSVpsnX3ljUVmJFlPFwMA2CsZjYj6f+r0mXWzM=

(3)最终接口请求参数为:

{
  "access_id": 3401040030003465,
  "sign_type": "RSA2",
  "time_stamp":1631602583000,
  "data": "eyJ0b3RhbCI6IDEwMCwic3VycGx1cyI6IDM1fQ==",
  "sign": "2j9R91P6Uz/dhEeE98ajDjWWbpcmfrLAjlQVT6wfHq1zM/rG/eetEdUJu+TBXloNnMuWlAL1zd5vfCTXKRbPY8SnH3lrq8mx316lCRRe406ynTOE6TSz6ebakwdGOmRIka0bjuSVpsnX3ljUVmJFlPFwMA2CsZjYj6f+r0mXWzM="
}