一般介面開發中有以下常用的幾種安全機制:
使用者認證
一般的介面測試工具都會提供乙個user auth/authorization的選項,以postman為例子,你可以看到以下的選項:
在使用 http/soap 協議傳輸資料的時候,簽名作為其中乙個引數,可以起到關鍵作用:
先來乙個簡單的,通過客戶的金鑰,服務端的金鑰匹配;
這個很有好理解,例如乙個介面傳參為:
假設簽名的金鑰為:@signpassword
加上簽名之後的介面引數為:
但是,這樣的sign 引數明文傳輸是不安全的,一般會選擇一些加密演算法,比如md5 演算法(md5演算法是不可逆向的),比如md5**如下:
import hashlib
md5 = hashlib.md5()
sign_str = "@signpassword"
sign_bytes_utf8 = sign_str.encode()
md5.update(sign_bytes_utf8)
sign_md5 = md5.hexdigest()
print(sign_md5)
執行後得到:6648e929329e53e7a91c50ae685a88b5
此時帶簽名的介面為:
所以,當伺服器接收到請求後,同樣需要對「signpassword」進行 md5 加密,然後,比對與呼叫者傳來的 sign 加密串是否一致,從而來鑑別呼叫者是否有許可權使用該介面。
接著,我們來理解乙個複雜一點的:把sign引數傳遞為api key(申請獲取)+timestramp(時間戳)同樣需要 用**來實現,原理和上面這個一致的。(偽**)
def setup(self):
self.base_url = ""
self.api_key = "&apikey"
# 當前時間
對於aes的加密來說,看一下用了pycrypto庫的結果
加密:
from crypto.cipher import aes
# 加密
obj = aes.new('this is a key123', aes.mode_cbc, 'this is an iv456')
message = "the answer is no"
ciphertext = obj.encrypt(message)
print(ciphertext)
程式執行後的結果為:b'\xd6\x83\x8dd!vt\x92\xaa`a\x05\xe0\x9b\x8b\xf1'
aes加密裡面有兩個關鍵,乙個是key(必須為16,24,32位),乙個是vi(必須為16位)
解密:解謎者必須要同時知道key和vi才可以解密
obj2 = aes.new('this is a key123', aes.mode_cbc, 'this is an iv456')
s = obj2.decrypt(ciphertext)
print(s)
===
so,介面加密測試的關鍵就在於開發小哥哥們用了什麼加密演算法來加密介面。你用相同的加密演算法來加密你要傳送的值 即可。
現在有很多的公司也把加密的演算法直接封裝成乙個類或者乙個介面,也就是測試的時候,你直接呼叫加密的類或者加密的介面即可完成你的加密工作。剩下的介面測試和以往沒加密的介面測試一樣沒兩樣了。
附送乙個pypi庫里一堆加密演算法庫的鏈結,自取:
加密介面怎麼測試?
摘要演算法 對明文編碼生成資訊摘要,以防止被篡改。比如md5使用的是hash演算法,無論多長的輸入,md5都會輸出長度為128bits的乙個串。摘要演算法不要秘鑰,客戶端和服務端採用相同的摘要演算法即可針對同一段明文獲取一致的密文 對稱加密 對稱加密演算法是共享金鑰加密演算法,在加密解密過程中,使用...
加密介面如何測試?
隨著網際網路技術的發展,服務安全性和資料安全性變的越來越重要,提供介面服務的系統往往會應用各種加密技術,保證介面的安全呼叫,如何應用工具來實現加密介面測試成為一項必要技能。在講解如何用jmeter實現介面安全性測試之前,先來了解一下常見的加密演算法,測試同學可根據不同的加密演算法型別和程式猿 程式猿...
介面測試如何確定token失效 加密介面如何測試?
隨著網際網路技術的發展,服務安全性和資料安全性變的越來越重要,提供介面服務的系統往往會應用各種加密技術,保證介面的安全呼叫,如何應用工具來實現加密介面測試成為一項必要技能。在講解如何用jmeter實現介面安全性測試之前,先來了解一下常見的加密演算法,測試同學可根據不同的加密演算法型別和程式猿 程式猿...