PYTHON實現(xiàn)SIGN簽名的過程解析
sign簽名是用于提供給外部(第三方)調(diào)用的接口,調(diào)用方需要提供正確的appkey鑰匙才能調(diào)用,確保了接口的安全性。
簽名參數(shù)sign生成方法:
假設有請求參數(shù)如下:
appkey = "111222333"
body = {
"username": "Test",
"Password": "123456",
"mail": "",
"sign": "xxx"
}
第一步:將所有參數(shù)(注意是所有參數(shù)),除去sign本身,以及值為空的參數(shù),轉化為鍵值對,沒有等于號的字符串。
期望的結果如下:
["usernameTest","Password123456"]
代碼實現(xiàn)2種方式:
1:for循環(huán)實現(xiàn):
list = []
for i in body.items():
if i[1] != "" and i[0] != "sign":
list.append("".join(i))
print(list)
2:列表生成式實現(xiàn):
s = ["".join(i) for i in body.items() if i[1] != "" and i[0] != "sign"] print(s)
2種方式打印出來的實際結果如下:

第二步:排序后的參數(shù)按照參數(shù)1值1,參數(shù)2值2的鍵值對順序拼接成一個字符串,按參數(shù)名字母順序升序排序。(具體升降順序得問開發(fā),一般為升序)
期望的結果如下:(按字母順序:Password開頭的在username前面)
“Password123456usernameTest”
代碼實現(xiàn):
# TODO 按字母升序排序 sort = "".join(sorted(list)) print(sort)
實際結果:

第三步:在前面得到的字符串后面,加上接入方驗證密匙appkey。
期望結果:
Password123456usernameTest111222333
代碼實現(xiàn):
# todo 3:在第二步得到的字符串后面,加上接入方驗證密匙key,然后計算md5值, result = sort+appkey print(result)
實際結果:

第四步:然后將這個字符串換為小寫進行md5加密計算,得到的這個值即為sign簽名值。
注意,計算md5之前請確保接口與接入方的字符串編碼一致,如統(tǒng)一使用utf-8編碼或者GBK編碼,如果編碼方式不一致則計算出來的簽名會校驗失敗。
代碼實現(xiàn):
# todo MD5加密,固定的寫法
def jiami(params):
m = hashlib.md5()
m.update(params.encode("utf-8"))
return m.hexdigest()
sign = jiami(result.lower()) #lower()把字符轉為小寫
print(sign)
實際結果:

全部過程如下:
'''sign簽名主要是用于提供給外部(第三方)調(diào)用的接口,需要提供appkey鑰匙才能調(diào)用'''
import hashlib
appkey = "111222333"
body = {
"username": "Test",
"Password": "123456",
"mail": "",
"sign": "xxx"
}
# todo 第1步: 將所有參數(shù)(注意是所有參數(shù)),除去sign本身,以及值是空的參數(shù),轉化為鍵值對的
#s = ["".join(i) for i in body.items() if i[1] != "" and i[0] != "sign"]
#print(s)
list = []
for i in body.items():
if i[1] != "" and i[0] != "sign":
list.append("".join(i))
print(list)
# todo 2:排序后的參數(shù)按照參數(shù)1值1,參數(shù)2值2的鍵值對順序拼接成一個字符串,按參數(shù)名字母升序排序
# TODO 按字母升序排序
sort = "".join(sorted(list))
print(sort)
# todo 3:在第二步得到的字符串后面,加上接入方驗證密匙key,然后計算md5值,
result = sort+appkey
print(result)
# todo MD5加密,固定的寫法
def jiami(params):
m = hashlib.md5()
m.update(params.encode("utf-8"))
return m.hexdigest()
sign = jiami(result.lower()) #lower()把字符轉為小寫
print(sign)
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
使用python連接Linux服務器發(fā)送指定命令的示例代碼
這篇文章主要介紹了使用python連接Linux服務器發(fā)送指定命令,首先安裝paramiko庫,使用paramiko庫連接linux,使用paramiko庫上傳下載文件,結合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-10-10
PyCharm2021最新激活碼+激活碼補丁(親測最新版PyCharm2021.3激活成功)
這篇文章主要介紹了PyCharm2021最新激活碼+激活碼補丁,親測最新版PyCharm2021.3激活成功,PyCharm2020激活成功2020-09-09
Python數(shù)據(jù)可視化圖實現(xiàn)過程詳解
這篇文章主要介紹了Python數(shù)據(jù)可視化圖實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06
pandas combine_first函數(shù)處理兩個數(shù)據(jù)集重疊和缺失
combine_first是pandas中的一個函數(shù),它可以將兩個DataFrame對象按照索引進行合并,用一個對象中的非空值填充另一個對象中的空值,這個函數(shù)非常適合處理兩個數(shù)據(jù)集有部分重疊和缺失的情況,可以實現(xiàn)數(shù)據(jù)的補全和更新,本文介紹combine_first函數(shù)的語法及一些案例應用2024-01-01
pytorch 中pad函數(shù)toch.nn.functional.pad()的用法
今天小編就為大家分享一篇pytorch 中pad函數(shù)toch.nn.functional.pad()的用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
python畫圖時設置分辨率和畫布大小的實現(xiàn)(plt.figure())
這篇文章主要介紹了python畫圖時設置分辨率和畫布大小的實現(xiàn)(plt.figure()),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01
pytorch Variable與Tensor合并后 requires_grad()默認與修改方式
這篇文章主要介紹了pytorch Variable與Tensor合并后 requires_grad()默認與修改方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05

