hmac --- 基于密鑰的消息驗證?

源代碼: Lib/hmac.py


此模塊實(shí)現了 HMAC 算法,算法的描述參見(jiàn) RFC 2104。

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

返回一個(gè)新的 hmac 對象。 key 是一個(gè)指定密鑰的 bytes 或 bytearray 對象。 如果提供了 msg,將會(huì )調用 update(msg) 方法。 digestmod 為 HMAC 對象所用的摘要名稱(chēng)、摘要構造器或模塊。 它可以是適用于 hashlib.new() 的任何名稱(chēng)。 雖然該參數位置靠后,但它卻是必須的。

在 3.4 版更改: 形參 key 可以為 bytes 或 bytearray 對象。 形參 msg 可以為 hashlib 所支持的任意類(lèi)型。 形參 digestmod 可以為某種哈希算法的名稱(chēng)。

Deprecated since version 3.4, removed in version 3.8: MD5 作為 digestmod 的隱式默認摘要已被棄用。 digestmod 形參現在是必須的。 請將其作為關(guān)鍵字參數傳入以避免當你沒(méi)有初始 msg 時(shí)將導致的麻煩。

hmac.digest(key, msg, digest)?

基于給定密鑰 keydigest 返回 msg 的摘要。 此函數等價(jià)于 HMAC(key, msg, digest).digest(),但使用了優(yōu)化的 C 或內聯(lián)實(shí)現,對放入內存的消息能處理得更快。 形參 key, msgdigest 具有與 new() 中相同的含義。

作為 CPython 的實(shí)現細節,優(yōu)化的 C 實(shí)現僅當 digest 為字符串并且是一個(gè) OpenSSL 所支持的摘要算法的名稱(chēng)時(shí)才會(huì )被使用。

3.7 新版功能.

HMAC 對象具有下列方法:

HMAC.update(msg)?

msg 來(lái)更新 hmac 對象。 重復調用相當于單次調用并傳入所有參數的拼接結果: m.update(a); m.update(b) 等價(jià)于 m.update(a + b)。

在 3.4 版更改: 形參 msg 可以為 hashlib 所支持的任何類(lèi)型。

HMAC.digest()?

返回當前已傳給 update() 方法的字節串數據的摘要。 這個(gè)字節串數據的長(cháng)度將與傳給構造器的摘要的長(cháng)度 digest_size 相同。 它可以包含非 ASCII 的字節,包括 NUL 字節。

警告

在驗證例程運行期間將 digest() 的輸出與外部提供的摘要進(jìn)行比較時(shí),建議使用 compare_digest() 函數而不是 == 運算符以減少定時(shí)攻擊防御力的不足。

HMAC.hexdigest()?

類(lèi)似于 digest() 但摘要會(huì )以?xún)杀堕L(cháng)度字符串的形式返回,其中僅包含十六進(jìn)制數碼。 這可以被用于在電子郵件或其他非二進(jìn)制環(huán)境中安全地交換數據值。

警告

在驗證例程運行期間將 hexdigest() 的輸出與外部提供的摘要進(jìn)行比較時(shí),建議使用 compare_digest() 函數而不是 == 運算符以減少定時(shí)攻擊防御力的不足。

HMAC.copy()?

返回 hmac 對象的副本(“克?。?。 這可被用來(lái)高效地計算共享相同初始子串的數據的摘要。

hash 對象具有以下屬性:

HMAC.digest_size?

以字節表示的結果 HMAC 摘要的大小。

HMAC.block_size?

以字節表示的哈希算法的內部塊大小。

3.4 新版功能.

HMAC.name?

HMAC 的規范名稱(chēng),總是為小寫(xiě)形式,例如 hmac-md5。

3.4 新版功能.

3.9 版后已移除: 未寫(xiě)入文檔的屬性 HMAC.digest_cons, HMAC.innerHMAC.outer 屬于內部實(shí)現細節,將在 Python 3.10 中被移除。

這個(gè)模塊還提供了下列輔助函數:

hmac.compare_digest(a, b)?

返回 a == b。 此函數使用一種經(jīng)專(zhuān)門(mén)設計的方式通過(guò)避免基于內容的短路行為來(lái)防止定時(shí)分析,使得它適合處理密碼。 ab 必須為相同的類(lèi)型:或者是 str (僅限 ASCII 字符,如 HMAC.hexdigest() 的返回值),或者是 bytes-like object。

備注

如果 ab 具有不同的長(cháng)度,或者如果發(fā)生了錯誤,定時(shí)攻擊在理論上可以獲取有關(guān) ab 的類(lèi)型和長(cháng)度信息 — 但不能獲取它們的值。

3.3 新版功能.

在 3.10 版更改: 此函數在可能的情況下會(huì )在內部使用 OpenSSL 的 CRYPTO_memcmp()。

參見(jiàn)

模塊 hashlib

提供安全哈希函數的 Python 模塊。