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

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

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

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

全部過(guò)程如下:
'''sign簽名主要是用于提供給外部(第三方)調(diào)用的接口,需要提供appkey鑰匙才能調(diào)用'''
import hashlib
appkey = "111222333"
body = {
"username": "Test",
"Password": "123456",
"mail": "",
"sign": "xxx"
}
# todo 第1步: 將所有參數(shù)(注意是所有參數(shù)),除去sign本身,以及值是空的參數(shù),轉(zhuǎn)化為鍵值對(duì)的
#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的鍵值對(duì)順序拼接成一個(gè)字符串,按參數(shù)名字母升序排序
# TODO 按字母升序排序
sort = "".join(sorted(list))
print(sort)
# todo 3:在第二步得到的字符串后面,加上接入方驗(yàn)證密匙key,然后計(jì)算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()把字符轉(zhuǎn)為小寫
print(sign)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用python連接Linux服務(wù)器發(fā)送指定命令的示例代碼
這篇文章主要介紹了使用python連接Linux服務(wù)器發(fā)送指定命令,首先安裝paramiko庫(kù),使用paramiko庫(kù)連接linux,使用paramiko庫(kù)上傳下載文件,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
PyCharm2021最新激活碼+激活碼補(bǔ)丁(親測(cè)最新版PyCharm2021.3激活成功)
這篇文章主要介紹了PyCharm2021最新激活碼+激活碼補(bǔ)丁,親測(cè)最新版PyCharm2021.3激活成功,PyCharm2020激活成功2020-09-09
Python數(shù)據(jù)可視化圖實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了Python數(shù)據(jù)可視化圖實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
pandas combine_first函數(shù)處理兩個(gè)數(shù)據(jù)集重疊和缺失
combine_first是pandas中的一個(gè)函數(shù),它可以將兩個(gè)DataFrame對(duì)象按照索引進(jìn)行合并,用一個(gè)對(duì)象中的非空值填充另一個(gè)對(duì)象中的空值,這個(gè)函數(shù)非常適合處理兩個(gè)數(shù)據(jù)集有部分重疊和缺失的情況,可以實(shí)現(xiàn)數(shù)據(jù)的補(bǔ)全和更新,本文介紹combine_first函數(shù)的語(yǔ)法及一些案例應(yīng)用2024-01-01
pytorch 中pad函數(shù)toch.nn.functional.pad()的用法
今天小編就為大家分享一篇pytorch 中pad函數(shù)toch.nn.functional.pad()的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
Python中實(shí)現(xiàn)WebSocket的示例詳解
WebSocket 是一種計(jì)算機(jī)通信協(xié)議,它為客戶端和服務(wù)器之間的雙向通信提供了一個(gè)全雙工的通道,本篇文章將詳解 Python 中如何實(shí)現(xiàn) WebSocket,感興趣的可以了解下2025-03-03
python畫圖時(shí)設(shè)置分辨率和畫布大小的實(shí)現(xiàn)(plt.figure())
這篇文章主要介紹了python畫圖時(shí)設(shè)置分辨率和畫布大小的實(shí)現(xiàn)(plt.figure()),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
centos系統(tǒng)升級(jí)python 2.7.3
CentOS上安裝的python版本是2.6,不能滿足我運(yùn)行軟件的要求,所以對(duì)python進(jìn)行升級(jí)。Python的最新版本已經(jīng)是3.3,但是Python3的兼容性可能還有一定的問(wèn)題,所以還是升級(jí)到2.7較為保險(xiǎn)。2014-07-07
pytorch Variable與Tensor合并后 requires_grad()默認(rèn)與修改方式
這篇文章主要介紹了pytorch Variable與Tensor合并后 requires_grad()默認(rèn)與修改方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05

