一般在三方暴露对外api时都会通过加密参数来保证数据的不可篡改行,而加密方式多种多样,像MD5、sha1、Base64、sha256、AES等各种加密编码算法。
而在验证用户方面会用到分配给用户的appkey及appSecret等信息,在参数传递的时候会将appKey或者appId作为公共参数传递以在三方符合获取此账户权限及秘钥,而秘钥则是隐示的存在参数加密编码中,三方按相同规则加密编码比对传输编码来保证数据没有被篡改。
而还有可能会对接口版本跟请求有效期进行传参限制,会增加版本参数v及时间戳等参数来限制暴露接口的安全性及多版本的非同加密方式。
以下是几个三方对接时的加密方式:
1. 电子签章法大大:
按上图的摘要计算流程来分析就是如下代码示例和步骤
代码语言:javascript复制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. 诸葛零售云:
公共参数
参与签名的参数
签名格式
把所有参数名和参数值进⾏拼接(参数值以“xxx”表⽰),拼接时不允许有跨⾏、空格等空⽩
字符:
代码语言:javascript复制app_keyxxxpathxxxtimestampxxxv1.0
将零售云分配的 app_secret 拼接到字符串的两端( app_secret 取值以“SSS”表⽰):
代码语言:javascript复制SSSapp_keyxxxpathxxxtimestampxxxv1.0SSS
⽤ SHA256 算法对原始串进⾏摘要,伪代码如下:
代码语言:javascript复制String sign = SHA256("SSSapp_keyxxxpathxxxtimestampxxxv1.0SSS")
最后得到的编码就是参数sign
3. 银豹:
PosPal 银豹收银系统
请求头
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
time-stamp | String | 是 | 时间戳, |
data-signature | String | 是 | 1:appKey,请求体 拼接 2:md5 加密(32位) 3:转为大写 |
这个比较简单,将appKey与请求体拼接后使用MD5加密得到编码串,编码串全部转为大写得到签名串,但是流程都是一致的