python介面自動化(十九) 簽名(signature)鑑權(authentication)之加密(HEX,MD5,HMAC-SHA256)
阿新 • • 發佈:2020-08-05
前言
開放的介面為了避免被別人亂呼叫,浪費伺服器資源,這就涉及到簽名(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)
執行結果