自動化測試時基于Python常用的幾個加密算法總結(jié)
0 寫在前邊
- 這幾天做自動化測試,遇到一個問題,那就是接口的請求的密碼是加密的;
- 產(chǎn)品的要求是不能使用使用其他特殊手段,他給提供加密算法,需要在接口請求的時候,使用加密算法處理后的數(shù)據(jù)傳參;
- 其實這樣來說反而簡單了很多,因為已經(jīng)知道加密算法,那就在傳參前先把密碼進(jìn)行加密處理就行了(心理默默的想,這個產(chǎn)品也太好了吧);
- 本文主要是整理了幾個加密算法,以便后續(xù)測試使用。
1 公用數(shù)據(jù)
- 為了方便后續(xù)舉例,我們設(shè)計一個類,來把需要演示的加密算法統(tǒng)一封裝起來:
# -*- coding:utf-8 -*- # 作者:蟲無涯 # 日期:2023/12/1 # 文件名稱:test_pass.py # 作用:常用的加密算法實現(xiàn) # 聯(lián)系:VX(NoamaNelson) # 博客:https://blog.csdn.net/NoamaNelson import hashlib class TestPass(): def __init__(self): super(TestPass, self).__init__() self.name = "admin" self.password = "123456" if __name__ == "__main__": test_pass = TestPass()
- 其中
self.name
模擬用戶名數(shù)據(jù),self.password
模擬密碼數(shù)據(jù)。
2 MD5直接加密
MD5
是一種常用的單向散列函數(shù),是不可逆的,也就是說無法通過被加密后的結(jié)果來確定加密前的內(nèi)容;- 生成結(jié)果為固定的128位字節(jié),一般為32位的十六進(jìn)制字符串;
- 這里會使用到
hashlib
,這個一般python
安裝完都是有的,目錄在:
X:\Python37\Lib\hashlib.py
- 直接加密實現(xiàn):
def test_md5(self): md = hashlib.md5(self.password.encode()) md5_pass = md.hexdigest() print(f"密碼{self.password}, md5直接加密后為:{md5_pass}")
- 輸出為:
密碼123456, md5直接加密后為:e10adc3949ba59abbe56e057f20f883e
3 用戶名和密碼組合MD5加密
- 有個真實的業(yè)務(wù)場景,在測試某個業(yè)務(wù)系統(tǒng)的時候,它不是簡單的密碼
MD5
加密; - 而是使用用戶名和密碼組合后,先轉(zhuǎn)小寫再
md5
加密; - 這個需求的實現(xiàn)過程為:
def test_md5_01(self): data = (self.name + self.password).lower() md = hashlib.md5(data.encode()) md5_pass = md.hexdigest() print(f"密碼{self.password},用戶名{self.name}, md5組合加密后為:{md5_pass}")
- 輸出為:
密碼123456,用戶名admin, md5組合加密后為:a66abb5684c45962d887564f08346e8d
4 密碼使用MD5+鹽加密
- 這個場景是先把密碼設(shè)置鹽;
- 然后將鹽拼接在原密碼之后;
- 實現(xiàn)過程為:
def test_md5_02(self): s = self.password[:5] # 設(shè)置鹽 md = hashlib.md5((self.password + s).encode()) md5_pass = md.hexdigest() print(f"密碼{self.password},md5加鹽后為:{md5_pass}")
- 輸出為:
密碼123456,md5加鹽后為:e363373ddc24b34c5bb9d99abbfd8be5
5 MD5加鹽后將密碼整體插入鹽中
- 這個場景也挺常見的,就是先設(shè)置鹽;
- 然后將原密碼和鹽使用
join
方式處理; - 實現(xiàn)過程為:
def test_md5_03(self): s = self.password[:6] # 設(shè)置鹽 md = hashlib.md5((self.password.join(s)).encode()) md5_pass = md.hexdigest() print(f"密碼{self.password},md5加鹽使用json方法為:{md5_pass}")
- 輸出為:
密碼123456,md5加鹽使用json方法為:43ec0d3f863b4f7e635e7169ddc18606
6 SHA1加密
- 這個和MD5類似,不過它的結(jié)果是160位字節(jié),一般為40位的十六進(jìn)制字符串;
- 它也是在
hashlib
中; - 用戶名和密碼拼接后使用
SHA1
加密,實現(xiàn)如下:
def test_sha1(self): data = self.name + self.password sha1 = hashlib.sha1() sha1.update(data.encode("utf-8")) sha1_pass = sha1.hexdigest() print(f"密碼{self.password},用戶名{self.name}, sha1組合加密后為:{sha1_pass}")
- 輸出為:
密碼123456,用戶名admin, sha1組合加密后為:cd5ea73cd58f827fa78eef7197b8ee606c99b2e6
7 SHA256加密
SHA256
比SHA1
更安全,但是效率慢,結(jié)果也會長一些;- 用戶名和密碼拼接后使用
SHA256
加密,實現(xiàn)如下:
def test_sha256(self): data = self.name + self.password sha256 = hashlib.sha256() sha256.update(data.encode("utf-8")) sha1_pass = sha256.hexdigest() print(f"密碼{self.password},用戶名{self.name}, sha256組合加密后為:{sha1_pass}")
- 輸出為:
密碼123456,用戶名admin, sha256組合加密后為:ac0e7d037817094e9e0b4441f9bae3209d67b02fa484917065f71b16109a1a78
- 當(dāng)然還有
SHA512
這個就不說了,同理可證。
8 HMAC加密
- 其實這個我自動化過程中用的不多,但是也是很常見的一個加密算法了;
HMAC
是一種基于加密hash
函數(shù)和共享密鑰的消息認(rèn)證協(xié)議;- 需要用到
hmac
庫,目錄在:
X:\Python37\Lib\hmac.py
- 有三個參數(shù),一個是密鑰,一個是待加密的字符串,一個是
hash
函數(shù),示例如下:
def test_hmac(self): hm = hmac.new(b'029-11111111', bytes(self.password, 'utf-8'), hashlib.md5) hm.digest() hmac_pass = hm.hexdigest() print(f"密碼{self.password},用戶名{self.name}, hmac加密后為:{hmac_pass}")
- 輸出為:
密碼123456,用戶名admin, hmac加密后為:4e32d965d8965df4c7f6aaaf68791e86
9 其他的算法
- 當(dāng)然后還有幾個算法,這個不再贅述了,比如
DES
、AES
、RSA
、ECC
等等 - 后續(xù)有空再補(bǔ)充吧。
10 本文源碼
# -*- coding:utf-8 -*- # 作者:蟲無涯 # 日期:2023/12/1 # 文件名稱:test_pass.py # 作用:常用的加密算法實現(xiàn) # 聯(lián)系:VX(NoamaNelson) # 博客:https://blog.csdn.net/NoamaNelson import hashlib import hmac class TestPass(): def __init__(self): super(TestPass, self).__init__() self.name = "admin" self.password = "123456" def test_md5(self): md = hashlib.md5(self.password.encode()) md5_pass = md.hexdigest() print(f"密碼{self.password}, md5直接加密后為:{md5_pass}") def test_md5_01(self): data = (self.name + self.password).lower() md = hashlib.md5(data.encode()) md5_pass = md.hexdigest() print(f"密碼{self.password},用戶名{self.name}, md5組合加密后為:{md5_pass}") def test_md5_02(self): s = self.password[:5] # 設(shè)置鹽 md = hashlib.md5((self.password + s).encode()) md5_pass = md.hexdigest() print(f"密碼{self.password},md5加鹽后為:{md5_pass}") def test_md5_03(self): s = self.password[:6] # 設(shè)置鹽 md = hashlib.md5((self.password.join(s)).encode()) md5_pass = md.hexdigest() print(f"密碼{self.password},md5加鹽使用json方法為:{md5_pass}") def test_sha1(self): data = self.name + self.password sha1 = hashlib.sha1() sha1.update(data.encode("utf-8")) sha1_pass = sha1.hexdigest() print(f"密碼{self.password},用戶名{self.name}, sha1組合加密后為:{sha1_pass}") def test_sha256(self): data = self.name + self.password sha256 = hashlib.sha256() sha256.update(data.encode("utf-8")) sha1_pass = sha256.hexdigest() print(f"密碼{self.password},用戶名{self.name}, sha256組合加密后為:{sha1_pass}") def test_hmac(self): hm = hmac.new(b'029-11111111', bytes(self.password, 'utf-8'), hashlib.md5) hm.digest() hmac_pass = hm.hexdigest() print(f"密碼{self.password},用戶名{self.name}, hmac加密后為:{hmac_pass}") if __name__ == "__main__": test_pass = TestPass() # test_pass.test_md5() # test_pass.test_md5_01() # test_pass.test_md5_02() # test_pass.test_md5_03() # test_pass.test_sha1() # test_pass.test_sha256() test_pass.test_hmac()
以上就是自動化測試時基于Python常用的幾個加密算法總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Python加密算法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python如何根據(jù)x軸、y軸坐標(biāo)在坐標(biāo)軸里畫出曲線圖
這篇文章主要介紹了python如何根據(jù)x軸、y軸坐標(biāo)在坐標(biāo)軸里畫出曲線圖問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10python深度學(xué)習(xí)tensorflow實例數(shù)據(jù)下載與讀取
這篇文章主要為大家介紹了python深度學(xué)習(xí)tensorflow實例數(shù)據(jù)下載與讀取示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Python+Tkinter實現(xiàn)經(jīng)典井字棋小游戲
Tkinter是內(nèi)置到Python安裝包中的,只要安裝好Python之后就能import?Tkinter,而且IDLE也是用Tkinter編寫而成的。本文將用Tkinter編寫經(jīng)典的井字棋小游戲,需要的可以參考一下2022-03-03Jupyter Notebook的連接密碼 token查詢方式
這篇文章主要介紹了Jupyter Notebook的連接密碼 token查詢方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04一文詳解如何使用Python實時輸出鼠標(biāo)坐標(biāo)
本文詳細(xì)介紹了如何使用Python中的pynput庫來實時獲取并輸出鼠標(biāo)的坐標(biāo)信息,通過pynput庫,可以輕松實現(xiàn)對鼠標(biāo)坐標(biāo)的跟蹤,適用于需要鼠標(biāo)交互的應(yīng)用場景,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10