签名算法
签名算法
=================
说明:secretKey是前后端约定好的加密字符串
这里假设 secretKey = hello
**注意**: ++所有POST请求的接口都需要签名 并且附加三个参数:‘time’ 代表客户端当前时间戳(10位),‘salt’客户端生成的随机字符串,‘sign’客户端计算出来的签名++
## 加密步骤:
1. 生成salt,salt为客户端生成的随机字符串
2. 将salt值进行二次处理
- salt值左右各去除一个字符,产生新的字符串saltA
- 在saltA的第2个字符后插入secrectKey
- saltA字符串进行反转处理,产生字符串saltB
3. 请求的非空参数值的参数按照参数名ASCII码从小到大排序(字典序)
使用URL键值对的格式(即key1=value1&key2=value2…&)拼接成字符串stringA
stringA拼接键值对key=saltB生成新的字符串stringB
*key参数只负责计算签名,请求参数不包含key
4. MD5计算stringB的产生32位字符结果值,结果值转为大写后产生的字符串为sign参数值
示例
---
假设随机生成的salt = 123456
那么saltA = 2345,
在saltA的第2个字符后插入secrectKey后得到 23hello45
故:key = saltB = 54olleh32
若POST参数值:
chapter_id:2
book_id:1
先加上time,和salt 参数得到
chapter_id:2
book_id:1
time:1613752982
salt:123456
生成的字典排序的query字符串:
book_id=2&chapte_id=1&salt=123456&time=1613752982
然后在拼接好的字符串最后再拼接 key 得到:
book_id=2&chapte_id=1&salt=123456&time=1613752982&key=54olleh32
最后将以上query字符串MD5后转大写得到sign
生成的签名:EE8F82BEB933F4C7601BD048E4DB0BC4
最后请求接口的参数为
chapter_id:2
book_id:1
time:1613752982
salt:123456
sign:EE8F82BEB933F4C7601BD048E4DB0BC4