亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

自動化測試時基于Python常用的幾個加密算法總結(jié)

 更新時間:2023年12月12日 14:11:27   作者:蟲無涯  
這幾天做自動化測試,遇到一個問題,那就是接口的請求的密碼是加密的,產(chǎn)品的要求是不能使用使用其他特殊手段,他給提供加密算法,需要在接口請求的時候,使用加密算法處理后的數(shù)據(jù)傳參,本文主要是整理了幾個加密算法,以便后續(xù)測試使用,需要的朋友可以參考下

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加密

  • SHA256SHA1更安全,但是效率慢,結(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棧類實例分析

    Python棧類實例分析

    這篇文章主要介紹了Python棧類,實例分析了Python實現(xiàn)棧的入棧、出棧、移除、判定為空的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • python如何根據(jù)x軸、y軸坐標(biāo)在坐標(biāo)軸里畫出曲線圖

    python如何根據(jù)x軸、y軸坐標(biāo)在坐標(biāo)軸里畫出曲線圖

    這篇文章主要介紹了python如何根據(jù)x軸、y軸坐標(biāo)在坐標(biāo)軸里畫出曲線圖問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • python深度學(xué)習(xí)tensorflow實例數(shù)據(jù)下載與讀取

    python深度學(xué)習(xí)tensorflow實例數(shù)據(jù)下載與讀取

    這篇文章主要為大家介紹了python深度學(xué)習(xí)tensorflow實例數(shù)據(jù)下載與讀取示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • python實現(xiàn)微信小程序反編譯效果

    python實現(xiàn)微信小程序反編譯效果

    這篇文章主要介紹了python實現(xiàn)微信小程序反編譯效果,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Python利用Turtle庫繪制一個小老虎

    Python利用Turtle庫繪制一個小老虎

    虎年就是要畫老虎!本文將通過Python中的Turtle庫繪制一個可愛的小老虎,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-02-02
  • python實現(xiàn)五子棋游戲

    python實現(xiàn)五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python+Tkinter實現(xiàn)經(jīng)典井字棋小游戲

    Python+Tkinter實現(xiàn)經(jīng)典井字棋小游戲

    Tkinter是內(nèi)置到Python安裝包中的,只要安裝好Python之后就能import?Tkinter,而且IDLE也是用Tkinter編寫而成的。本文將用Tkinter編寫經(jīng)典的井字棋小游戲,需要的可以參考一下
    2022-03-03
  • Jupyter Notebook的連接密碼 token查詢方式

    Jupyter Notebook的連接密碼 token查詢方式

    這篇文章主要介紹了Jupyter Notebook的連接密碼 token查詢方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 詳細(xì)一文帶你分清Python中的模塊、包和庫

    詳細(xì)一文帶你分清Python中的模塊、包和庫

    這篇文章主要介紹了詳細(xì)一文帶你分清Python中的模塊、包和庫,Python?模塊(Module),是一個?Python?文件,以?.py?結(jié)尾,包含了?Python?對象定義和Python語句,模塊能定義函數(shù),類和變量,模塊也能包含可執(zhí)行的代碼,需要的朋友可以參考下
    2023-08-08
  • 一文詳解如何使用Python實時輸出鼠標(biāo)坐標(biāo)

    一文詳解如何使用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

最新評論