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.