hmac — 用於訊息認證的金鑰雜湊

原始碼: Lib/hmac.py


此模組實現了 RFC 2104 中描述的 HMAC 演算法。

hmac.new(key, msg=None, digestmod)

返回一個新的 hmac 物件。key 是一個位元組或位元組陣列物件,給出金鑰。如果存在 msg,則進行方法呼叫 update(msg)digestmod 是要使用的 HMAC 物件的摘要名稱、摘要建構函式或模組。它可以是適合 hashlib.new() 的任何名稱。儘管其引數位置,它是必需的。

在 3.4 版本中更改: 引數 key 可以是位元組或位元組陣列物件。引數 msg 可以是 hashlib 支援的任何型別。引數 digestmod 可以是雜湊演算法的名稱。

在 3.8 版本中更改: 現在需要 digestmod 引數。當您沒有初始 msg 時,將其作為關鍵字引數傳遞可以避免尷尬。

hmac.digest(key, msg, digest)

返回給定金鑰 keydigestmsg 的摘要。該函式等效於 HMAC(key, msg, digest).digest(),但使用最佳化的 C 或內聯實現,對於適合記憶體的訊息更快。引數 keymsgdigest 的含義與 new() 中的相同。

CPython 實現細節,僅當 digest 是一個字串並且是 OpenSSL 支援的摘要演算法名稱時,才使用最佳化的 C 實現。

3.7 版本中新增。

HMAC 物件具有以下方法

HMAC.update(msg)

使用 msg 更新 hmac 物件。重複呼叫等效於對所有引數的串聯進行單個呼叫:m.update(a); m.update(b) 等效於 m.update(a + b)

在 3.4 版本中更改: 引數 msg 可以是 hashlib 支援的任何型別。

HMAC.digest()

返回到目前為止傳遞給 update() 方法的位元組的摘要。此位元組物件的長度將與提供給建構函式的摘要的 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_consHMAC.innerHMAC.outer

此模組還提供以下輔助函式

hmac.compare_digest(a, b)

返回 a == b。此函式使用一種旨在透過避免基於內容的短路行為來防止定時分析的方法,使其適用於密碼學。ab 必須是相同的型別:要麼是 str (僅限 ASCII,例如由 HMAC.hexdigest() 返回的),要麼是 類似位元組的物件

注意

如果 ab 的長度不同,或者發生錯誤,則定時攻擊可能會在理論上洩露有關 ab 的型別和長度的資訊,但不會洩露它們的值。

3.3 版本中新增。

在 3.10 版本中更改: 該函式在可用時在內部使用 OpenSSL 的 CRYPTO_memcmp()

參見

模組 hashlib

提供安全雜湊函式的 Python 模組。