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'}
md5
在 algorithms_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
物件,該方法返回僅包含十六進位制數字的摘要的字串物件。