python的sign簽名函式

2021-10-25 09:44:17 字數 1909 閱讀 2965

a公司給b公司開發了乙個介面,那麼a公司給b公司乙個sign簽名,確保資料的安全。

客戶端:當使用者請求服務前,會定義請求引數,通過這些引數,生成相應的sign簽名,生成之後,傳給伺服器。

服務端:接收傳過來的請求資料,先根據傳過來的引數,生成sign簽名,之後與客戶端傳來的sign簽名進行乙個比對,如果兩個sign簽名一致,則允許訪問伺服器資料,否則禁止訪問。

2、 sign簽名的加密方法:

(1 將所有的引數去除sign本身以及值為空的引數

(2 將以上的的引數按照字母公升序排序

(3 將排序後的引數按照:引數1值1引數2值2……拼接成乙個字串

(4 將秘鑰拼接在字串後面

(5 將以上字元全部換成小寫,通過md5計算加密,得到sign值

(6 將這個值傳到伺服器,伺服器進行解碼,識別這個值是否是我們要傳的請求,如果是,則返回值。

# 舉個栗子:乙個請求的body引數為以下:,提供的apikey為123456

# body =

接下來使用python實現簽名

defjiami

(apikey,body)

:# 1、去除值為空以及sign值的引數

list=[

]for i in body.items():

# print(i) 遍歷出來的是元組('username', 'test')。

if i[0]

!='sign'

and i[1]

!=''

:list

"".join(i)

)# 將遍歷出來的元組進行拼接。

print

('去除值為空以及sign值的引數後的list:%s'

%list

)# 2、 將以上的的引數按照字母公升序排序

list

.sort(

)# 預設為公升序排序,sort返回結果是乙個list

print

('引數按照字母公升序排序的list:%s'

%list

)# 3、將排序後的引數按照:引數1值1引數2值2……拼接成乙個字串

list_a=

"".join(

list

)print

('拼接後返回的新的字串:%s'

% list_a)

# 4、 將秘鑰拼接在字串後面

result = list_a + apikey

print

('秘鑰拼接在字串後的結果:%s'

% result)

# 5、將以上字元全部換成小寫,通過md5計算加密

import hashlib

defjiamind5

(src)

:# 函式巢狀乙個函式

m = hashlib.md5(

)# 建立乙個物件

m.update(result.encode(

'utf-8'))

return m.hexdigest(

)# print(sign)

sign = jiamind5(src=

'result'

)print

(sign)

# 得到sign簽名後的新的body值

body[

'sign'

]= sign # 將sign值更新到body

print

(body)

if __name__==

'__main__'

: apikey =

"123456"

# 秘鑰,由開發提供

body =

jiami(apikey, body)

輸出結果為:

python介面測試實戰 sign簽名

最近測試的專案由於需要給第三方呼叫,所以增加了安全性的認證,所有的介面呼叫都需要簽名進行驗籤,於是研究了一下使用python按照介面簽名規範生成sign值。1 請求引數中的 sign 引數和為空的引數去除後,剩餘的多個鍵值對,將鍵按照字典序排序,並以key1 value1 key2 value2的格...

postman中設定全域性動態sign簽名指令碼

進入某個collection的全域性edit設定 在 pre request scripts 選項卡設定全域性指令碼 全域性指令碼貼上 function getcurrentdate var secretcode ctw7i3cv6eu4pnch3n4bmzkannnjx4jq var timest...

HttpRunner2 X學習 sign簽名

前言 為了安全,很多介面都會有簽名機制,如果沒有簽名將無法訪問介面 案例 在debugtalk.py中寫入簽名的方法 setup hook 對請求的body進行預處理sign加密 import hashlib import json import time deftime up currenttim...