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或内联实现,这对于适合内存的消息来说更快。参数 keymsg消化 与中的含义相同 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_consHMAC.innerHMAC.outer 是内部实现的详细信息,将在Python3.10中删除。

此模块还提供以下帮助程序功能:

hmac.compare_digest(a, b)

返回 a == b . 该函数使用了一种方法,通过避免基于内容的短路行为来防止时间分析,使其适合于加密。 ab 必须都是同一类型:或者 str (仅限ASCII,例如 HMAC.hexdigest()bytes-like object .

注解

如果 ab 长度不同,或者如果发生错误,定时攻击理论上可以揭示 ab -但不是他们的价值观。

3.3 新版功能.

在 3.10 版更改: 函数使用OpenSSL的 CRYPTO_memcmp() 如果有的话,在内部。

参见

模块 hashlib

python模块提供安全的散列函数。