python接口自动化(十九) 签名(signature)鉴权(authentication)之加密(HEX,MD5,HMAC-SHA256)

前言

开放的接口为了避免被别人乱调用,浪费服务器资源,这就涉及到签名(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.md5加密比较简单,直接调用hashlib内置的库就能解决

import hashlib
def md5_jiami(p):
    m=hashlib.md5()
    m.update(p.encode('UTF-8'))
    return m.hexdigest()
print(md5_jiami('123456'))

 运行结果

 

 timestamp

1.生成Unix时间戳,由于python里面获取的是带小数点的,转int类型,就可以了

import time
print(time.time())
print(int(time.time()))

 运行结果

 

 hmac_sha256加密

1.先用hmac里面方法生成signature字符串,注意new()里面传的两个参数是bytes类型

import hmac
import hashlib
appkey="one"
strToSign="six"
#hmac_sha256加密
signature=hmac.new(bytes(appkey,encoding='utf-8'),bytes(strToSign,encoding='utf-8'),digestmod=hashlib.sha256).digest()
#print(signature)
#二进制转为HEX
HEX=signature.hex()
#print(HEX)
#将字符串换为小写
lowsigne=HEX.lower()
print(lowsigne)

s=hmac.new(bytes(appkey,encoding='utf-8'),bytes(strToSign,encoding='utf-8'),digestmod=hashlib.sha256).hexdigest().lower()
print(s)  

 运行结果

 

posted on 2020-08-05 21:00  星空6  阅读(2039)  评论(0编辑  收藏  举报

导航