如何利用 Python 完成驗簽操作


檸檬班Python8期的佑佑以及Python7期的掠掠同學昨天都私下問華華老師如何利用Python完成驗簽的操作。 今天我們就以佑佑的例子來跟大家進行簡單的說明以及操作!

一、什么是驗簽:

用非常簡單的話來描述:有一個發送消息的端 A 有一個接收消息的端B ,以及A發給B的信息 msg,發送過程要進行簽名(類似於對數據加密成一個sign)
A對發送的msg進行加密簽名,隨請求發送一個sign
B接收消息,要對sign進行驗簽,檢測消息發送端以及來源是否安全與正確。
注意:sign的生成跟發送的信息有關,且有專門的加密算法。

二、情景再現:

1)加密的算法如下所示(Python代碼):

def md5Encode(param):
    client_secret='F0897E16-5D1E-4A31-9644-BBF974E2DD88'#此為加密的秘鑰
    sign=param+client_secret
    m = hashlib.md5(sign.encode(encoding='utf-8'))
    return m.hexdigest().upper()

 

2)請求的數據如下所示:

param={"inputCodes":["6932608700850"], "terminal":{"status":1,"channel":"D002",
"storeCode":"2107","passage":"D002","storeName":"檸檬班Python全棧自動化","identity":"","maxProductCount":5,"posId":"D002"}}

3)隨請求發送的請求頭如下(sign表示這里需要傳遞簽名后的數據):

 header={"client_id":"DataSync","sign":"D74259421E46D25C9E81CF991B7075DB","Content-Type":"application/json;charset=UTF-8"}

4)要求以及說明:

  • 請求傳遞的數據param以及利用md5Encode函數對參數進行加密生成的sign的字段順序要一模一樣
  • 難點在於:param是一個字典,無法保證它的順序
  • 解題思路:對字典param進行排序,使之成為有序的字典形式

三、解決難題:

  • 先利用collections模塊里面的OrderedDict來對字典完成排序 from collections import OrderedDict

    param={"inputCodes":["6932608700850"],
    "terminal":{"status":1,"channel":"D002","storeCode":"2107",
    "passage":"D002","storeName":"檸檬班Python全棧自動化","identity":"","maxProductCount":5,"posId":"D002"}}
    dict_2=OrderedDict()
    for item in param:
    if type(item)==dict:
        dict_sub=OrderedDict()
        for key in item:
            dict_sub[key]=item[key]
        dict_2[item]=dict_sub
    else:
        dict_2[item]=param[item]
    #最后得到的dict_2就是排序過后的字典
  • 利用md5Encode函數對param進行加密,但是md5Encode只能對字符串進行加密,所以要先利用json轉成字符串。

str_data=json.dumps(dict_2)
sign=md5Encode(str_data)
#得到的sign就是加密后的簽名
  • 把sign替換到head這個數據里面去,發起請求
header={"client_id":"DataSync","sign":sign,"Content-Type":"application/json;charset=UTF-8"}
res=requests.post(url,json=dict_2,headers=header,verify=False)
print(res.json())

最后完成的請求如下所示:

驗簽的操作就完成了!這個還是一種非常簡單的驗簽,平常可能會需要添加時間戳等變動字段,但是解決方案是一樣的!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM