On this page
hmac —消息身份验证的键哈希
源代码: Lib/hmac.py
此模块实现 RFC 2104所描述的 HMAC 算法。
hmac.
new
(* key , msg = None , digestmod =''*)- 返回一个新的 hmac 对象。 * key 是提供密钥的字节或字节数组对象。如果存在 msg *,则进行方法调用
update(msg)
。 * digestmod *是供 HMAC 对象使用的摘要名称,摘要构造函数或模块。它可以是适合hashlib.new()的任何名称。尽管有论据立场,但这是必需的。
- 返回一个新的 hmac 对象。 * key 是提供密钥的字节或字节数组对象。如果存在 msg *,则进行方法调用
在版本 3.4 中更改:参数* key 可以是字节或字节数组对象。参数 msg 可以是hashlib支持的任何类型。参数 digestmod *可以是哈希算法的名称。
从 3.4 版开始不推荐使用,在 3.8 版中删除:不推荐使用 MD5 作为* digestmod *的隐式默认摘要。现在需要 digestmod 参数。当您没有初始 msg 时,将其作为关键字参数传递以避免尴尬。
hmac.
digest
(* key , msg , digest *)- 为给定的 Secret* key 和 digest 返回 msg 的摘要。该函数等效于
HMAC(key, msg, digest).digest()
,但是使用优化的 C 或内联实现,对于适合内存的消息,此实现更快。参数 key , msg 和 digest *具有与new()相同的含义。
- 为给定的 Secret* key 和 digest 返回 msg 的摘要。该函数等效于
CPython 实现细节,仅当* digest *是摘要算法的字符串和名称(由 OpenSSL 支持)时,才使用优化的 C 实现。
3.7 版中的新Function。
HMAC 对象具有以下方法:
HMAC.
update
(* msg *)- 用* msg *更新 hmac 对象。重复调用等效于将所有参数串联在一起的单个调用:
m.update(a); m.update(b)
等效于m.update(a + b)
。
- 用* msg *更新 hmac 对象。重复调用等效于将所有参数串联在一起的单个调用:
在版本 3.4 中更改:参数* msg *可以是hashlib支持的任何类型。
HMAC.
digest
( )- 返回到目前为止传递给update()方法的字节的摘要。该字节对象的长度与提供给构造函数的摘要的* digest_size *相同。它可能包含非 ASCII 字节,包括 NUL 字节。
Warning
在验证例程期间将digest()的输出与外部提供的摘要进行比较时,建议使用compare_digest()函数而不是==
运算符来减少定时攻击的脆弱性。
HMAC.
hexdigest
( )- 像digest()一样,摘要以字符串形式返回,该字符串的长度是仅包含十六进制数字的两倍。这可用于在电子邮件或其他非二进制环境中安全地交换值。
Warning
在验证例程期间将hexdigest()的输出与外部提供的摘要进行比较时,建议使用compare_digest()函数而不是==
运算符来减少定时攻击的脆弱性。
HMAC.
copy
( )- 返回 hmac 对象的副本(“克隆”)。这可用于有效地计算共享公共初始子字符串的字符串的摘要。
哈希对象具有以下属性:
HMAC.
digest_size
- 生成的 HMAC 摘要的大小(以字节为单位)。
HMAC.
block_size
- 哈希算法的内部块大小(以字节为单位)。
3.4 版的新Function。
HMAC.
name
- 此 HMAC 的规范名称,始终为小写字母,例如
hmac-md5
。
- 此 HMAC 的规范名称,始终为小写字母,例如
3.4 版的新Function。
此模块还提供以下帮助器Function:
hmac.
compare_digest
(* a , b *)- 返回
a == b
。此Function使用一种旨在避免时序分析的方法,该方法可避免基于内容的短路行为,从而使其适用于密码学。 * a 和 b *都必须是同一类型:str(仅 ASCII,例如HMAC.hexdigest()返回)或bytes-like object。
- 返回
Note
如果* a 和 b 的长度不同,或者发生错误,则定时攻击理论上可以揭示有关 a 和 b *的类型和长度的信息,但不能显示其值。
版本 3.3 中的新Function。
See also
Module hashlib
提供安全哈希函数的 Python 模块。