# 加密处理简述
鉴于安全性的考虑,目前需要对下发的指令和数据,在下发前,对其进行加密,然后发送到服务器端。由服务器端进行校验,并对指令进行提取。
【整体思路主要参考上海新能源地标的操作,简述如下:】
采用RSA加密方式加密。公钥私钥配对,将由平台生成。
# 1.公钥PubKey
E5ltC1lkRJ3or0AdodGgnN1csx7aBe9So2MACYourfJabnGPufknIJ82IyRqOiGBtXO+9BByMSsURoX0jNFfDjn0aPdqz1QS3vgLoRYgazwP66/F0X2yrYPxqeQdYEnH2lI95w5ZOl02zjCXJ+RdETANHrm0/NyaqYzMwB4HYig=
# 2.加密及签名规则
a)按顺序拼接输入参数得到字符串A
b)对拼接的字符串A做MD5加密运算得到字符串B
c)设置token参数值为该字符串B
d)对Body的整个串加密
# 示例
为描述方便,假设有一个第三方公司需要接入,平台提供了如下信息:
平台登录用户名为:Test
平台登录密码为:abcdef123456
调用接口API时间戳为:1487830369942
# 1.根据调用的接口API,按顺序拼接参数得到字符串A,如下所示
encrypt=RSA,user=Test,secretKey=abcdef123456,operatype=1, timestamp=1487830369942
# 2.对拼接的字符串A做MD5加密运算得到字符串为
8a08aa97972b74ac8c5764135674faa4
# 3.设置header中token参数值为:
8a08aa97972b74ac8c5764135674faa4
# 4.body参数加密
假定需要传输2辆车的信息,如下JSON串BODYSTR为:
data =[{"vincode":"123456789",},{"vincode":"1234567890"}]
使用公钥将JSON串BODYSTR进行RSA加密,再将加密结果进行base64编码得到加密串,将得到加密密文ENCSTR放到body里传输,后台使用私钥解密。示例BODYSTR的加密串ENCSTR如下所示:
byJEe9VYrPZ1SEjVr6l9RQ5t3b+c+ctda7bi3blwNY02jh2z0dLI/MrRN8tmGSWNR6HzOQ03mG94BJwzd8YKjh0Oq4sXabN2qzG9Gv4hzYy4HAZP42nnLVbIOYJ8SZOIO/uSg2XOMb9jpb5odb7sHE1Y0Uq3Ao9CQJAzJ7icHyuG+FVQrYCEYPwXR6l+KuT1DOPmy78V+ePKCDTugffJ/UeZ0ZzbmEfNdOo6FwiBDCOkVYvceou9LA+mC/AszASdRdTKptyCqlawGEWy+Ex46yvZ+fkQOk61JoCSmjptAnylPDtSxNtJvm7Vmj8MmpdxPv2YRhcfroD3h7c8uKEoMA==
# 5.最终发送的串为
encrypt=RSA,user=Test,secretKey=abcdef123456,operatype=1, timestamp=1487830369942, token=8a08aa97972b74ac8c5764135674faa4, body=byJEe9VYrPZ1SEjVr6l9RQ5t3b+c+ctda7bi3blwNY02jh2z0dLI/MrRN8tmGSWNR6HzOQ03mG94BJwzd8YKjh0Oq4sXabN2qzG9Gv4hzYy4HAZP42nnLVbIOYJ8SZOIO/uSg2XOMb9jpb5odb7sHE1Y0Uq3Ao9CQJAzJ7icHyuG+FVQrYCEYPwXR6l+KuT1DOPmy78V+ePKCDTugffJ/UeZ0ZzbmEfNdOo6FwiBDCOkVYvceou9LA+mC/AszASdRdTKptyCqlawGEWy+Ex46yvZ+fkQOk61JoCSmjptAnylPDtSxNtJvm7Vmj8MmpdxPv2YRhcfroD3h7c8uKEoMA==
# 1.用户名登录
# 1.1. 接口功能
APP用户使用用户名密码登录OBOS
# 1.2. URL
http://ip:port/api/usrlogin
# 1.3. 请求方式
POST
# 1.4. 请求参数
参数名称 | 参数类型 | 是否必选 | 参数说明 |
---|---|---|---|
timestamp | Long | True | 时间戳 |
user | String | True | 登录用户名 |
token | Integer | True | 校验值 |
body | String | True | body串为对{“passwd”:”12345678”}串加密后所得 |
# 1.5. 接口返回
参数名称 | 参数类型 | 参数说明 |
---|---|---|
retStr | String | 加密后的内容 |
# 1.6. 接口示例
http://localhost:8080/api/usrlogin
{
"retStr": "SbNWrRi6h/KYUYYmeXv/mMPIgQ+ELjZW5/oyu9o/NPIAcZTazLxqyw/IHdH2SwoupPPcfvWUwJ3fEJpsG+JhZGFrzAxTWKB005urT0/DEHviPQgC4VGrEDlldOZzjlnJcWlXHWfEco7SvvHpMlx2Hsr1OT7c+NclUfp1cMIAJ1tLNb0rlQ/9iUCJzwXqtCV3cYc5PIu9pNM0fN1wDAhdqqI+/qgHwpRpxC7cIiT5PDxMBPDk+iN655TiOo3T2HzvPaNi46pGmXH9ftoORc126oGzIlrKU8KRkrzM2Dqa3ez1G58ahS0xECbcM9umi3fUFKxhaRe9r3DW/5MH+qP05Q=="
}
2
3
# 2.VIN码登录
# 2.1. 接口功能
使用VIN登录。
# 2.2. URL
http://ip:port/api/vinlogin
# 2.3. 请求方式
POST
# 2.4. 请求参数
参数名称 | 参数类型 | 是否必选 | 参数说明 |
---|---|---|---|
timestamp | Long | True | 时间戳 |
user | String | True | 登录用户名 |
token | Integer | True | 校验值 |
body | String | True | body串为对{“passwd”:”12345678”,vincode:qwe12345rt6}加密后所得 |
# 2.5. 接口返回
参数名称 | 参数类型 | 参数说明 |
---|---|---|
retStr | String | 加密后的内容,包含sessionid字段 |
# 2.6. 接口示例
http://localhost:8080/api/vinlogin
{
"retStr": "SbNWrRi6h/KYUYYmeXv/mMPIgQ+ELjZW5/oyu9o/NPIAcZTazLxqyw/IHdH2SwoupPPcfvWUwJ3fEJpsG+JhZGFrzAxTWKB005urT0/DEHviPQgC4VGrEDlldOZzjlnJcWlXHWfEco7SvvHpMlx2Hsr1OT7c+NclUfp1cMIAJ1tLNb0rlQ/9iUCJzwXqtCV3cYc5PIu9pNM0fN1wDAhdqqI+/qgHwpRpxC7cIiT5PDxMBPDk+iN655TiOo3T2HzvPaNi46pGmXH9ftoORc126oGzIlrKU8KRkrzM2Dqa3ez1G58ahS0xECbcM9umi3fUFKxhaRe9r3DW/5MH+qP05Q=="
}
2
3
# 3. 参数下发
# 3.1. 接口功能
停止指定设备指定通道下的实时流推送。
# 3.2. URL
http://ip:port/api/sendCommand
# 3.3. 请求方式
POST
# 3.4. 请求参数
参数名称 | 参数类型 | 是否必选 | 参数说明 |
---|---|---|---|
timestamp | Long | True | 时间戳 |
user | String | True | 登录用户名 |
token | Integer | True | 校验值 |
body | String | True | body串为对{“cmdtype”:1}加密后所得 |
# 3.5. 接口返回
参数名称 | 参数类型 | 参数说明 |
---|---|---|
retStr | String | 加密后的内容 |
# 3.6. 接口示例
http://localhost:8080/api/sendCommand
{
"retStr": "H310qVDiEnoQESFj88N6iVzf8DkX/3+x5FY27mmhwTTuJchsBf33reMvFNMyi0QPkgcR+wx/fn3kOSIBM9KRHZJ/XjTuYneYRH1t6EDT/2+isVahyCUBFFSHwqV4SkB0NumUjfuXaCqOOcw5M7w0jnTTOXX2bNTDX/kdakWVn0U="
}
2
3
# 4. 查询任务状态
# 4.1. 接口功能
查询终端的任务执行状态。
# 4.2. URL
http://ip:port/api/queryTaskStatus
# 4.3. 请求方式
POST
# 4.4. 请求参数
参数名称 | 参数类型 | 是否必选 | 参数说明 |
---|---|---|---|
timestamp | Long | True | 时间戳 |
user | String | True | 登录用户名 |
token | Integer | True | 校验值 |
body | String | True | 详细信息 |
# 4.5. 接口返回
参数名称 | 参数类型 | 参数说明 |
---|---|---|
retStr | String | 加密后的内容 |
# 4.6. 接口示例
http://localhost:8080/api/queryTaskStatus
{
"retStr": "jMKXAbf8k+TUJN1kBz5bo8nGaKOkyLq9KjkwcoGeus51T540sW1B6sUwCJYt6AvnGzdPx8mhv990kAG70Sia7fdIwQHP3TaIVd1wFc4JtajJHAF+0pZKV6Y6CfaqsQmavxXjbSSRwNoRPV/Q3AZD5ML/e0rfWRpMnWSlE2L11SQ="
}
2
3
# 5. 获取服务器列表
# 5.1. 接口功能
App在启动时,首页需要显示所支持的服务器列表。此接口用于获取列表。
# 5.2. URL
http://ip:port/api/getAppServerList
# 5.3. 请求方式
GET
# 5.4. 请求参数
参数名称 | 参数类型 | 是否必选 | 参数说明 |
---|
# 5.5. 接口返回
参数名称 | 参数类型 | 参数说明 |
---|---|---|
retStr | String | 加密后的内容 |
servername | String | 服务器名称 |
serverinfo | String | 服务器信息 |
servertype | String | 1:公网 2:专网(不用访问鸿途) |
# 5.6. 接口示例
http://localhost:8080/api/getAppServerList
{
"retStr": "jMKXAbf8k+TUJN1kBz5bo8nGaKOkyLq9KjkwcoGeus51T540sW1B6sUwCJYt6AvnGzdPx8mhv990kAG70Sia7fdIwQHP3TaIVd1wFc4JtajJHAF+0pZKV6Y6CfaqsQmavxXjbSSRwNoRPV/Q3AZD5ML/e0rfWRpMnWSlE2L11SQ="
}
2
3