自動(dòng)化測(cè)試時(shí)基于Python常用的幾個(gè)加密算法總結(jié)
0 寫(xiě)在前邊
- 這幾天做自動(dòng)化測(cè)試,遇到一個(gè)問(wèn)題,那就是接口的請(qǐng)求的密碼是加密的;
- 產(chǎn)品的要求是不能使用使用其他特殊手段,他給提供加密算法,需要在接口請(qǐng)求的時(shí)候,使用加密算法處理后的數(shù)據(jù)傳參;
- 其實(shí)這樣來(lái)說(shuō)反而簡(jiǎn)單了很多,因?yàn)橐呀?jīng)知道加密算法,那就在傳參前先把密碼進(jìn)行加密處理就行了(心理默默的想,這個(gè)產(chǎn)品也太好了吧);
- 本文主要是整理了幾個(gè)加密算法,以便后續(xù)測(cè)試使用。
1 公用數(shù)據(jù)
- 為了方便后續(xù)舉例,我們?cè)O(shè)計(jì)一個(gè)類,來(lái)把需要演示的加密算法統(tǒng)一封裝起來(lái):
# -*- coding:utf-8 -*-
# 作者:蟲(chóng)無(wú)涯
# 日期:2023/12/1
# 文件名稱:test_pass.py
# 作用:常用的加密算法實(shí)現(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ù),是不可逆的,也就是說(shuō)無(wú)法通過(guò)被加密后的結(jié)果來(lái)確定加密前的內(nèi)容;- 生成結(jié)果為固定的128位字節(jié),一般為32位的十六進(jìn)制字符串;
- 這里會(huì)使用到
hashlib,這個(gè)一般python安裝完都是有的,目錄在:
X:\Python37\Lib\hashlib.py
- 直接加密實(shí)現(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加密
- 有個(gè)真實(shí)的業(yè)務(wù)場(chǎng)景,在測(cè)試某個(gè)業(yè)務(wù)系統(tǒng)的時(shí)候,它不是簡(jiǎn)單的密碼
MD5加密; - 而是使用用戶名和密碼組合后,先轉(zhuǎn)小寫(xiě)再
md5加密; - 這個(gè)需求的實(shí)現(xiàn)過(guò)程為:
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+鹽加密
- 這個(gè)場(chǎng)景是先把密碼設(shè)置鹽;
- 然后將鹽拼接在原密碼之后;
- 實(shí)現(xiàn)過(guò)程為:
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加鹽后將密碼整體插入鹽中
- 這個(gè)場(chǎng)景也挺常見(jiàn)的,就是先設(shè)置鹽;
- 然后將原密碼和鹽使用
join方式處理; - 實(shí)現(xiàn)過(guò)程為:
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加密
- 這個(gè)和MD5類似,不過(guò)它的結(jié)果是160位字節(jié),一般為40位的十六進(jìn)制字符串;
- 它也是在
hashlib中; - 用戶名和密碼拼接后使用
SHA1加密,實(shí)現(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é)果也會(huì)長(zhǎng)一些;- 用戶名和密碼拼接后使用
SHA256加密,實(shí)現(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這個(gè)就不說(shuō)了,同理可證。
8 HMAC加密
- 其實(shí)這個(gè)我自動(dòng)化過(guò)程中用的不多,但是也是很常見(jiàn)的一個(gè)加密算法了;
HMAC是一種基于加密hash函數(shù)和共享密鑰的消息認(rèn)證協(xié)議;- 需要用到
hmac庫(kù),目錄在:
X:\Python37\Lib\hmac.py
- 有三個(gè)參數(shù),一個(gè)是密鑰,一個(gè)是待加密的字符串,一個(gè)是
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)然后還有幾個(gè)算法,這個(gè)不再贅述了,比如
DES、AES、RSA、ECC等等 - 后續(xù)有空再補(bǔ)充吧。
10 本文源碼
# -*- coding:utf-8 -*-
# 作者:蟲(chóng)無(wú)涯
# 日期:2023/12/1
# 文件名稱:test_pass.py
# 作用:常用的加密算法實(shí)現(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()
以上就是自動(dòng)化測(cè)試時(shí)基于Python常用的幾個(gè)加密算法總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Python加密算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python爬取”頂點(diǎn)小說(shuō)網(wǎng)“《純陽(yáng)劍尊》的示例代碼
這篇文章主要介紹了python爬取”頂點(diǎn)小說(shuō)網(wǎng)“《純陽(yáng)劍尊》的示例代碼,幫助大家更好的利用python 爬蟲(chóng)爬取數(shù)據(jù),感興趣的朋友可以了解下2020-10-10
python-itchat 獲取微信群用戶信息的實(shí)例
今天小編就為大家分享一篇python-itchat 獲取微信群用戶信息的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Python3實(shí)現(xiàn)定時(shí)任務(wù)的四種方式
Python實(shí)現(xiàn)定點(diǎn)與定時(shí)任務(wù)方式比較多,找到下面四中實(shí)現(xiàn)方式,每個(gè)方式都有自己應(yīng)用場(chǎng)景;下面來(lái)快速介紹Python中常用的定時(shí)任務(wù)實(shí)現(xiàn)方式,一起看看吧2019-06-06
TensorFlow利用saver保存和提取參數(shù)的實(shí)例
今天小編就為大家分享一篇TensorFlow利用saver保存和提取參數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
一篇文章帶你了解python標(biāo)準(zhǔn)庫(kù)--sys模塊
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)之Sys模塊使用詳解,本文講解了使用sys模塊獲得腳本的參數(shù)、處理模塊、使用sys模塊操作模塊搜索路徑、使用sys模塊查找內(nèi)建模塊、使用sys模塊查找已導(dǎo)入的模塊等使用案例,需要的朋友可以參考下2021-08-08
Python小工具之消耗系統(tǒng)指定大小內(nèi)存的方法
今天小編就為大家分享一篇Python小工具之消耗系統(tǒng)指定大小內(nèi)存的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
python實(shí)現(xiàn)程序重啟和系統(tǒng)重啟方式
這篇文章主要介紹了python實(shí)現(xiàn)程序重啟和系統(tǒng)重啟方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04

