hashlib --- 安全雜湊與訊息摘要

原始碼:Lib/hashlib.py


該模組實作了許多不同雜湊演算法的通用介面,其中包括 FIPS 安全雜湊演算法 SHA1、SHA224、SHA256、SHA384、SHA512(定義於 FIPS 180-4 標準)、SHA-3 系列(定義於 FIPS 202 標準)以及遺留的 SHA1 演算法(先前為 FIPS 的一部分)和 MD5 演算法(定義於網際網路 RFC 1321)。

備註

如果你需要 adler32 或 crc32 雜湊函式,可以在 zlib 模組中找到它們。

雜湊演算法

每種種類的 hash 都有一個以其命名的建構函式方法。全部都會回傳具有相同簡單介面的雜湊物件。例如:可使用 sha256() 來建立 SHA-256 雜湊物件。現在你可以使用 update 方法向此物件提供類位元組物件 (bytes-like objects)(通常是 bytes)。在任何時候,你都可以使用 digest()hexdigest() 方法來要求它提供迄今為止傳遞給它的資料串聯的摘要 (digest)

為了允許多執行緒 (multithreading),Python GIL 被釋放,同時在其建構函式或 .update 方法中計算一次提供超過 2047 位元組資料的雜湊值。

此模組中始終存在的雜湊演算法之建構函式有 sha1()sha224()sha256()sha384()sha512()sha3_224()sha3_256()sha3_384()sha3_512()shake_128()shake_256()blake2b()blake2s()md5() 通常也可用,但如果你使用罕見的「符合 FIPS (FIPS compliant)」的 Python 建置版本,它可能不存在或者不被允許使用。以上會對應到 algorithms_guaranteed

如果你的 Python 發行版的 hashlib 與提供其他演算法的 OpenSSL 版本鏈結,也可能有其他演算法可用。其他則不保證可用於在所有安裝上,並且只能以名稱來透過 new() 存取。請參閱 algorithms_available

警告

某些演算法具有已知的雜湊碰撞 (hash collision) 弱點(包括 MD5 和 SHA1)。請參閱 Attacks on cryptographic hash algorithms 和本文件後面的也參考部分。

在 3.6 版被加入: 新增了 SHA3 (Keccak) 和 SHAKE 建構函式 sha3_224()sha3_256()sha3_384()sha3_512()shake_128()shake_256()。也新增了 blake2b()blake2s()

在 3.9 版的變更: 所有 hashlib 建構函式都採用一個僅限關鍵字引數 (keyword-only argument) usedforsecurity,其預設值為 True。False 值則會允許在受限環境中使用不安全 (insecure) 和阻塞的 (blocked) 雜湊演算法。False 表示雜湊演算法未在安全情境中使用,例如作為一種非加密用途的單向壓縮函式。

在 3.9 版的變更: Hashlib 現在使用 OpenSSL 中的 SHA3 和 SHAKE(如果有提供的話)。

在 3.12 版的變更: 對於鏈結之 OpenSSL 未提供的任何 MD5、SHA1、SHA2 或 SHA3 演算法,我們會回退使用 HACL* 專案中經過驗證的實作。

用法

取得位元組字串 b"Nobody inspects the spammish repetition" 的摘要:

>>> import hashlib
>>> m = hashlib.sha256()
>>> m.