Python 中的 MD5 雜湊

TJ Lerias 2023年1月30日 Python Python MD5
  1. 什麼是雜湊
  2. 什麼是 MD5
  3. Python hashlib 模組
  4. 在 Python 中使用 MD5 演算法
Python 中的 MD5 雜湊

本文將演示如何使用 Python hashlib 模組使用 MD5 雜湊。

什麼是雜湊

雜湊是一個函式,它獲取可變長度的資料並將其轉換為固定長度。從雜湊函式返回的值稱為雜湊值、雜湊程式碼或摘要。雜湊值通常用於索引稱為雜湊表的固定大小的表。

什麼是 MD5

MD5 訊息摘要演算法是一種流行的雜湊函式,可生成 128 位雜湊值。最初設計為加密雜湊函式,由於存在多個安全問題和漏洞,它現在通常用於驗證資料完整性。

Python hashlib 模組

Python 標準庫包含一個模組,該模組實現了許多不同的安全雜湊和訊息摘要演算法,稱為 hashlib。它還可能包括其他可用的演算法,具體取決於 Python 在你的平臺上使用的 OpenSSL 庫。

要使用雜湊演算法,請匯入 hashlib 模組。

import hashlib

我們現在可以使用該模組支援的雜湊演算法。要檢查正在執行的 Python 直譯器中可用的雜湊演算法,請使用常量屬性 algorithms_available

import hashlib

print(hashlib.algorithms_available)

輸出:

{'md5', 'blake2s', 'sha256', 'sha384', 'sha3_512', 'blake2b', 'md4', 'md5-sha1', 'sha512_224', 'sha224', 'sha3_224', 'ripemd160', 'sha3_256', 'shake_256', 'sm3', 'shake_128', 'sha3_384', 'sha1', 'sha512_256', 'whirlpool', 'sha512'}

上面的列表是 hashlib 中可用的演算法,包括 OpenSSL 的可用演算法

要檢查此模組保證在所有平臺上支援的雜湊演算法,請使用常量屬性 algorithms_guaranteed

import hashlib

print(hashlib.algorithms_guaranteed)

輸出:

{'sha3_256', 'sha256', 'sha3_224', 'sha224', 'blake2s', 'sha3_512', 'shake_128', 'sha512', 'sha3_384', 'shake_256', 'md5', 'blake2b', 'sha384', 'sha1'}
注意
md5algorithms_guaranteed 列表中,但一些 FIPS 相容上游供應商提供了排除它的 Python 構建。

在 Python 中使用 MD5 演算法

要使用 md5 演算法,我們將使用 md5() 建構函式並使用 update() 方法為雜湊物件提供類似位元組的物件,或者將資料作為建構函式的引數傳遞。

要獲取雜湊值,請使用 digest() 方法,該方法返回饋送到雜湊物件的資料的 bytes 物件摘要。

import hashlib

md5_hash = hashlib.md5()
md5_hash.update(b"Hello World")

print(md5_hash.digest())

輸出:

b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'

你也可以將資料作為引數傳遞給建構函式並獲取雜湊值

import hashlib

print(hashlib.md5(b"Hello World").digest())

輸出:

b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'

digest() 方法類似,你也可以使用 hexdigest(),它返回僅包含十六進位制數字的摘要的字串物件。

import hashlib

md5_hash = hashlib.md5()
md5_hash.update(b"Hello World")

print(md5_hash.hexdigest())

輸出:

b10a8db164e0754105b7a99be72e3fe5

請注意,在傳遞給 update() 方法的字串文字之前有一個 b。它用於建立 bytes 型別而不是 str 型別的例項。由於雜湊函式只接受一個位元組序列作為引數。不支援將字串物件傳遞給 update() 方法。

你還可以多次呼叫 update() 方法,這相當於將所有引數連線在一起的單個呼叫。

import hashlib

first_hash = hashlib.md5()
first_hash.update(b"Hello World, Hello Python")
print(first_hash.hexdigest())

second_hash = hashlib.md5()
second_hash.update(b"Hello World,")
second_hash.update(b" Hello Python")
print(second_hash.hexdigest())

輸出:

b0f2921c8c0e63898b0388777908893a
b0f2921c8c0e63898b0388777908893a

總之,我們可以通過 hashlib 模組使用 md5 雜湊演算法,該模組可以通過將資料作為 md5() 建構函式的引數傳遞或使用 update() 方法來提供資料。我們可以使用 digest() 方法獲取雜湊值,該方法返回 digest()hexdigest() 方法的 bytes 物件,該方法返回僅包含十六進位制數字的摘要的字串物件。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe