一般在三方暴露对外api时都会通过加密参数来保证数据的不可篡改行,而加密方式多种多样,像MD5、sha1、Base64、sha256、AES等各种加密编码算法。
而在验证用户方面会用到分配给用户的appkey及appSecret等信息,在参数传递的时候会将appKey或者appId作为公共参数传递以在三方符合获取此账户权限及秘钥,而秘钥则是隐示的存在参数加密编码中,三方按相同规则加密编码比对传输编码来保证数据没有被篡改。
而还有可能会对接口版本跟请求有效期进行传参限制,会增加版本参数v及时间戳等参数来限制暴露接口的安全性及多版本的非同加密方式。
以下是几个三方对接时的加密方式:
1. 电子签章法大大:
按上图的摘要计算流程来分析就是如下代码示例和步骤
Base64(
SHA1(
app_id
+MD5(timestamp)
+SHA1(app_secret+ sort)
)
)
步骤
1.
序列化需要参与
A.
将参与摘要计算的业务参数按字典升序排列
B.
将
app_secret
附加到字符串串前
步骤
2.
对得到的字符串进⾏
SHA1
加密
步骤 3. 计算 timestamp 的 MD5 值,并和 app_id ,步骤 2 中得到的字符串拼接得到新的字符串
步骤
4.
对步骤
3
中得到的字符串进行
SHA1
加密
步骤
5.
对步骤
4
中得到的字符串进⾏
base64
加密
在传参时会分公共参数与业务参数,公共参数是必要的,而业务参数则是针对每个接口的业务规则所对应的参数
法大大的公共参数有
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
app_id
|
String
|
是
|
接入方ID
|
timestamp
|
String
|
是
|
请求时间
yyyyMMddHHmmss
|
v
|
String
|
是
|
版本号
|
msg_digest
|
String
|
是
|
签名摘要
|
2. 诸葛零售云:
公共参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
app-key
|
String
|
是
|
零售云为租⼾分配
|
timestamp
|
String
|
是
|
调⽤API时的系统时间戳,时区为GMT+0800
|
v
|
String
|
是
|
版本号,固定值1.0
|
sign
|
String
|
是
|
签名串
|
参与签名的参数
参数 | 说明 |
timestamp
|
调⽤API时的系统时间戳,时区为GMT+0800
|
app_key
|
零售云为租⼾分配
|
app_secret
|
零售云为租⼾分配
|
v
|
版本号,固定值1.0
|
path
|
请求路径
|
签名格式
把所有参数名和参数值进⾏拼接(参数值以“xxx”表⽰),拼接时不允许有跨⾏、空格等空⽩
字符:
app_keyxxxpathxxxtimestampxxxv1.0
将零售云分配的
app_secret
拼接到字符串的两端(
app_secret
取值以“SSS”表⽰):
SSSapp_keyxxxpathxxxtimestampxxxv1.0SSS
⽤
SHA256
算法对原始串进⾏摘要,伪代码如下:
String sign = SHA256("SSSapp_keyxxxpathxxxtimestampxxxv1.0SSS")
最后得到的编码就是参数sign
3. 银豹:
请求头
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
time-stamp |
String
|
是
| 时间戳, |
data-signature |
String
|
是
| 1:appKey,请求体 拼接 2:md5 加密(32位) 3:转为大写 |
这个比较简单,将appKey与请求体拼接后使用MD5加密得到编码串,编码串全部转为大写得到签名串,但是流程都是一致的