hmac
--- 基于密鑰的消息驗證?
源代碼: Lib/hmac.py
此模塊實現(xiàn)了 HMAC 算法,算法的描述參見 RFC 2104。
- hmac.new(key, msg=None, digestmod='')?
返回一個新的 hmac 對象。 key 是一個指定密鑰的 bytes 或 bytearray 對象。 如果提供了 msg,將會調用
update(msg)
方法。 digestmod 為 HMAC 對象所用的摘要名稱、摘要構造器或模塊。 它可以是適用于hashlib.new()
的任何名稱。 雖然該參數(shù)位置靠后,但它卻是必須的。在 3.4 版更改: 形參 key 可以為 bytes 或 bytearray 對象。 形參 msg 可以為
hashlib
所支持的任意類型。 形參 digestmod 可以為某種哈希算法的名稱。Deprecated since version 3.4, removed in version 3.8: MD5 作為 digestmod 的隱式默認摘要已被棄用。 digestmod 形參現(xiàn)在是必須的。 請將其作為關鍵字參數(shù)傳入以避免當你沒有初始 msg 時將導致的麻煩。
- hmac.digest(key, msg, digest)?
基于給定密鑰 key 和 digest 返回 msg 的摘要。 此函數(shù)等價于
HMAC(key, msg, digest).digest()
,但使用了優(yōu)化的 C 或內聯(lián)實現(xiàn),對放入內存的消息能處理得更快。 形參 key, msg 和 digest 具有與new()
中相同的含義。作為 CPython 的實現(xiàn)細節(jié),優(yōu)化的 C 實現(xiàn)僅當 digest 為字符串并且是一個 OpenSSL 所支持的摘要算法的名稱時才會被使用。
3.7 新版功能.
HMAC 對象具有下列方法:
- HMAC.update(msg)?
用 msg 來更新 hmac 對象。 重復調用相當于單次調用并傳入所有參數(shù)的拼接結果:
m.update(a); m.update(b)
等價于m.update(a + b)
。在 3.4 版更改: 形參 msg 可以為
hashlib
所支持的任何類型。
- HMAC.digest()?
返回當前已傳給
update()
方法的字節(jié)串數(shù)據(jù)的摘要。 這個字節(jié)串數(shù)據(jù)的長度將與傳給構造器的摘要的長度 digest_size 相同。 它可以包含非 ASCII 的字節(jié),包括 NUL 字節(jié)。警告
在驗證例程運行期間將
digest()
的輸出與外部提供的摘要進行比較時,建議使用compare_digest()
函數(shù)而不是==
運算符以減少定時攻擊防御力的不足。
- HMAC.hexdigest()?
類似于
digest()
但摘要會以兩倍長度字符串的形式返回,其中僅包含十六進制數(shù)碼。 這可以被用于在電子郵件或其他非二進制環(huán)境中安全地交換數(shù)據(jù)值。警告
在驗證例程運行期間將
hexdigest()
的輸出與外部提供的摘要進行比較時,建議使用compare_digest()
函數(shù)而不是==
運算符以減少定時攻擊防御力的不足。
- HMAC.copy()?
返回 hmac 對象的副本(“克隆)。 這可被用來高效地計算共享相同初始子串的數(shù)據(jù)的摘要。
hash 對象具有以下屬性:
- HMAC.digest_size?
以字節(jié)表示的結果 HMAC 摘要的大小。
- HMAC.block_size?
以字節(jié)表示的哈希算法的內部塊大小。
3.4 新版功能.
- HMAC.name?
HMAC 的規(guī)范名稱,總是為小寫形式,例如
hmac-md5
。3.4 新版功能.
3.9 版后已移除: 未寫入文檔的屬性 HMAC.digest_cons
, HMAC.inner
和 HMAC.outer
屬于內部實現(xiàn)細節(jié),將在 Python 3.10 中被移除。
這個模塊還提供了下列輔助函數(shù):
- hmac.compare_digest(a, b)?
返回
a == b
。 此函數(shù)使用一種經(jīng)專門設計的方式通過避免基于內容的短路行為來防止定時分析,使得它適合處理密碼。 a 和 b 必須為相同的類型:或者是str
(僅限 ASCII 字符,如HMAC.hexdigest()
的返回值),或者是 bytes-like object。備注
如果 a 和 b 具有不同的長度,或者如果發(fā)生了錯誤,定時攻擊在理論上可以獲取有關 a 和 b 的類型和長度信息 — 但不能獲取它們的值。
3.3 新版功能.
在 3.10 版更改: 此函數(shù)在可能的情況下會在內部使用 OpenSSL 的
CRYPTO_memcmp()
。
參見
- 模塊
hashlib
提供安全哈希函數(shù)的 Python 模塊。