最近工作中在测试WebApi的时候遇到了鉴权,验证的场景,涉及到获取token,加密验签等问题。
主要使用python的Hashlib库和request库,前者可以处理信息加密和摘要,后者完成Http收发。
首先介绍一下这段时间学习下来自己对于加密加签的理解:
对称加密(AES):用同一段密文进行加密解密,得到相同的值
非对称加密(RSA):双方各执一对密钥,私钥和公钥,然后双方互换公钥:本地留存客户端私钥和服务器公钥,服务器留存服务器私钥和客户端公钥,发送时使用私钥加密,接收方用发送方的公钥解密,返回报文使用接收方私钥加密,发送方收到后使用接收方的公钥解密。此类加密方式多用于验签。
在此总结一下几个常用请求参数的生成代码:
一. Nonce&Uuid生成
由于两者生成方法近似,故放在一起说,
Nonce:number once,即只被使用一次的随机整数。
Uuid:Universally Unique Identifier,全局唯一标识符
两者都是随机数,但是用处不同。
import hashlib
def getNonce():
#根据当前时间生成随机戳
md5str = hashlib.md5()
md5str.update((str(int(time.time() * 1000)) + str(random.random)).encode())
nonce = md5str.hexdigest()
return nonce
def getRandomUuid(length):
#生成指定长度的UUID,也可以使用randomuuid库生成
i = 0
charList = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
uuid = ""
while(i<length):
uuid += charList[random.randint(0,61)]
i += 1
return uuid
二.MD5生成
MD5: MessageDigest 消息摘要
md5 = hashlib.md5()
md5.update(####KEY####