开放的接口为了避免被别人乱调用,浪费服务器资源,这就涉及到签名(Signature)加密了
API 使用签名方法(Signature)对接口进行鉴权(Authentication)。每一次请求都需要在请求中包含签名信息, 以验证用户身份。
接口签名
1.根据需求文档,看接口的签名规则,每个公司的签名规则都不一样,以下仅供参考:
2.从这个文档中可以看出涉及到以下几个点:
- HMAC-SHA256
HMAC (Hash-based Message Authentication Code) 常用于接口签名验证
支持的算法有 md5、sha1、sha256、sha512、adler32、crc32等
- Binary2HEX
将二进制转换为 HEX
- Lowercase
将字符串转为小写
- MD5(HTTP body)
对post请求body进行md5加密
- Unix时间戳
Unix格式的时间戳,单位s
MD5加密
1 1.md5加密比较简单,直接调用hashlib内置的库就能解决 3 import hashlib 4 # MD5加密 5 def jiamimd5(src): 6 m = hashlib.md5() 7 m.update(src.encode(‘UTF-8‘)) 8 return m.hexdigest()
timestamp
1.生成Unix时间戳,由于python里面获取的是带小数点的,转int类型就可以了
hmac_sha256加密
1 1.先用hmac里面方法生成signature字符串,注意new()里面传的两个参数是bytes类型 2 import hmac 3 import hashlib 4 appkey = "需要申请" 5 strToSign = "根据文档规则生成" 6 # hmac_sha256加密 7 signature = hmac.new(bytes(appkey, encoding=‘utf-8‘), bytes(strToSign, encoding=‘utf-8‘), digestmod=hashlib.sha256).digest() 8 # print(signature) 9 # 二进制转为HEX 10 HEX = signature.hex() 11 # print(HEX) 12 # 将字符串换为小写 13 lowsigne = HEX.lower()