hmac —消息身份验证的键哈希

源代码: Lib/hmac.py


此模块实现 RFC 2104所描述的 HMAC 算法。

  • hmac. new(* key msg = None digestmod =''*)
    • 返回一个新的 hmac 对象。 * key 是提供密钥的字节或字节数组对象。如果存在 msg *,则进行方法调用update(msg)。 * digestmod *是供 HMAC 对象使用的摘要名称,摘要构造函数或模块。它可以是适合hashlib.new()的任何名称。尽管有论据立场,但这是必需的。

在版本 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()相同的含义。

CPython 实现细节,仅当* digest *是摘要算法的字符串和名称(由 OpenSSL 支持)时,才使用优化的 C 实现。

3.7 版中的新Function。

HMAC 对象具有以下方法:

  • HMAC. update(* msg *)
    • 用* msg *更新 hmac 对象。重复调用等效于将所有参数串联在一起的单个调用:m.update(a); m.update(b)等效于m.update(a + b)

在版本 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

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 模块。