hmac
— 用於訊息認證的金鑰雜湊演算法¶
原始碼: Lib/hmac.py
此模組實現了 RFC 2104 中描述的 HMAC 演算法。該介面允許使用任何具有*固定*摘要大小的雜湊函式。特別地,可擴充套件輸出函式(如 SHAKE-128 或 SHAKE-256)不能與 HMAC 一起使用。
- hmac.new(key, msg=None, digestmod)¶
返回一個新的 hmac 物件。key 是一個 bytes 或 bytearray 物件,給出金鑰。如果 msg 存在,則會執行
update(msg)
方法呼叫。digestmod 是 HMAC 物件要使用的摘要名稱、摘要建構函式或模組。它可以是任何適用於hashlib.new()
的名稱。儘管它位於引數列表的末尾,但它是必需的。在 3.4 版本發生變更: 引數 key 可以是 bytes 或 bytearray 物件。引數 msg 可以是
hashlib
支援的任何型別。引數 digestmod 可以是雜湊演算法的名稱。在 3.8 版本發生變更: digestmod 引數現在是必需的。當沒有初始的 msg 時,請以關鍵字引數的形式傳遞它,以避免尷尬。
- hmac.digest(key, msg, digest)¶
返回給定金鑰 key 和摘要 digest 的 msg 的摘要。該函式等效於
HMAC(key, msg, digest).digest()
,但使用最佳化的 C 或內聯實現,對於適合記憶體的訊息速度更快。引數 key、msg 和 digest 的含義與new()
中相同。CPython 實現細節:只有當 digest 是一個字串且為 OpenSSL 支援的摘要演算法名稱時,才會使用最佳化的 C 實現。
在 3.7 版本加入。
- class hmac.HMAC¶
一個 HMAC 物件具有以下方法:
- HMAC.update(msg)¶
用 msg 更新 hmac 物件。重複呼叫等效於使用所有引數的串聯進行單次呼叫:
m.update(a); m.update(b)
等效於m.update(a + b)
。在 3.4 版本發生變更: 引數 msg 可以是
hashlib
支援的任何型別。
- HMAC.digest()¶
返回到目前為止傳遞給
update()
方法的位元組串的摘要。此 bytes 物件的長度將與給予建構函式的摘要的 digest_size 相同。它可能包含非 ASCII 位元組,包括 NUL 位元組。警告
在驗證例程中將
digest()
的輸出與外部提供的摘要進行比較時,建議使用compare_digest()
函式而不是==
運算子,以減少時間側通道攻擊的漏洞。
- HMAC.hexdigest()¶
類似於
digest()
,但摘要以兩倍長度的字串形式返回,其中僅包含十六進位制數字。這可用於在電子郵件或其他非二進位制環境中安全地交換值。警告
在驗證例程中將
hexdigest()
的輸出與外部提供的摘要進行比較時,建議使用compare_digest()
函式而不是==
運算子,以減少時間側通道攻擊的漏洞。
- HMAC.copy()¶
返回 hmac 物件的副本(“克隆”)。這可用於高效地計算共享相同初始子字串的字串的摘要。
一個雜湊物件有下列屬性:
- HMAC.digest_size¶
生成的 HMAC 摘要的大小(以位元組為單位)。
- HMAC.block_size¶
雜湊演算法的內部塊大小(以位元組為單位)。
在 3.4 版本加入。
- HMAC.name¶
此 HMAC 的規範名稱,總是小寫,例如
hmac-md5
。在 3.4 版本加入。
在 3.10 版本發生變更: 移除了未在文件中說明的屬性 HMAC.digest_cons
、HMAC.inner
和 HMAC.outer
。
此模組還提供以下輔助函式:
- hmac.compare_digest(a, b)¶
返回
a == b
。此函式使用一種旨在防止時間分析的方法,透過避免基於內容的短路行為,使其適用於密碼學。a 和 b 必須都是相同型別:要麼是str
(僅限 ASCII,例如由HMAC.hexdigest()
返回),要麼是類位元組物件。備註
如果 a 和 b 的長度不同,或者如果發生錯誤,時間側通道攻擊理論上可以揭示有關 a 和 b 的型別和長度的資訊,但不能揭示它們的值。
在 3.3 版本加入。
在 3.10 版本發生變更: 該函式在可用時內部使用 OpenSSL 的
CRYPTO_memcmp()
。
參見
- 另請參閱
hashlib
模組 提供安全雜湊函式的 Python 模組。