hmac
---消息认证的键控hash¶
源代码: Lib/hmac.py
该模块实现了HMAC算法,如 RFC 2104 .
- hmac.new(key, msg=None, digestmod='')¶
返回新的HMAC对象。 key 提供密钥的字节或字节数组对象。如果 msg 存在,方法调用
update(msg)
是做出来的。 食糜 要使用的HMAC对象的摘要名称、摘要构造函数或模块。它可以是任何适合hashlib.new()
. 尽管它的论证立场是必要的。在 3.4 版更改: 参数 key 可以是字节或字节数组对象。参数 msg 可以是支持的任何类型
hashlib
. 参数 食糜 可以是hash算法的名称。Deprecated since version 3.4, removed in version 3.8: MD5作为的隐式默认摘要 食糜 已弃用。digestmod参数现在是必需的。将其作为关键字参数传递,以避免在没有初始msg时出现尴尬。
- hmac.digest(key, msg, digest)¶
返回摘要 msg 对于给定的秘密 key 和 消化 . 该函数等价于
HMAC(key, msg, digest).digest()
,但使用优化的C或内联实现,这对于适合内存的消息来说更快。参数 key , msg 和 消化 与中的含义相同new()
.cpython实现细节,只有在 消化 是由OpenSSL支持的摘要算法的字符串和名称。
3.7 新版功能.
HMAC对象具有以下方法:
- HMAC.update(msg)¶
用更新hmac对象 msg . 重复调用相当于一个具有所有参数串联的调用:
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对象的副本(“复制”)。这可以用来有效地计算共享公共初始子字符串的字符串的摘要。
hash对象具有以下属性:
- HMAC.digest_size¶
生成的HMAC摘要的大小(字节)。
- HMAC.block_size¶
hash算法的内部块大小(字节)。
3.4 新版功能.
- HMAC.name¶
此hmac的规范名称,始终为小写,例如
hmac-md5
.3.4 新版功能.
3.9 版后已移除: 未记录的属性 HMAC.digest_cons
, HMAC.inner
和 HMAC.outer
是内部实现的详细信息,将在Python3.10中删除。
此模块还提供以下帮助程序功能:
- hmac.compare_digest(a, b)¶
返回
a == b
. 该函数使用了一种方法,通过避免基于内容的短路行为来防止时间分析,使其适合于加密。 a 和 b 必须都是同一类型:或者str
(仅限ASCII,例如HMAC.hexdigest()
) bytes-like object .注解
如果 a 和 b 长度不同,或者如果发生错误,定时攻击理论上可以揭示 a 和 b -但不是他们的价值观。
3.3 新版功能.
在 3.10 版更改: 函数使用OpenSSL的
CRYPTO_memcmp()
如果有的话,在内部。
参见
- 模块
hashlib
python模块提供安全的散列函数。