1. 程式人生 > >python接口自動化23-簽名(signature)鑒權(authentication)之加密(HEX、MD5、HMAC-SHA256)

python接口自動化23-簽名(signature)鑒權(authentication)之加密(HEX、MD5、HMAC-SHA256)

-s .com 常用 lower byte 時間戳 python接口 信息 block

前言

開放的接口為了避免被別人亂調用,浪費服務器資源,這就涉及到簽名(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()

python接口自動化23-簽名(signature)鑒權(authentication)之加密(HEX、MD5、HMAC-SHA256)