# 接口加密方案
最新更新时间: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="
}