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

2.2 版中的新Function。

源代码: Lib/hmac.py


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

  • hmac. new(* key * [,* msg * [,* digestmod *]])
    • 返回一个新的 hmac 对象。如果存在* msg *,则进行方法调用update(msg)。 * digestmod *是供 HMAC 对象使用的摘要构造函数或模块。它默认为hashlib.md5构造函数。

HMAC 对象具有以下方法:

  • HMAC. update(* msg *)

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

    • 返回到目前为止传递给update()方法的字符串的摘要。该字符串的长度与提供给构造函数的摘要的* digest_size *相同。它可能包含非 ASCII 字符,包括 NUL 字节。

Warning

在验证例程期间将digest()的输出与外部提供的摘要进行比较时,建议使用compare_digest()函数而不是==运算符来减少定时攻击的脆弱性。

  • HMAC. hexdigest ( )
    • digest()一样,摘要以字符串形式返回,该字符串的长度是仅包含十六进制数字的两倍。这可用于在电子邮件或其他非二进制环境中安全地交换值。

Warning

在验证例程期间将hexdigest()的输出与外部提供的摘要进行比较时,建议使用compare_digest()函数而不是==运算符来减少定时攻击的脆弱性。

  • HMAC. copy ( )
    • 返回 hmac 对象的副本(“克隆”)。这可用于有效地计算共享公共初始子字符串的字符串的摘要。

此模块还提供以下帮助器Function:

  • hmac. compare_digest(* a b *)
    • 返回a == b。此Function使用一种旨在避免时序分析的方法,该方法可避免基于内容的短路行为,从而使其适用于密码学。 * a b *必须都属于同一类型:unicodebytes-like object

Note

如果* a b 的长度不同,或者发生错误,则定时攻击理论上可以揭示有关 a b *的类型和长度的信息,但不能显示其值。

2.7.7 版中的新Function。

See also

  • Module hashlib

  • 提供安全哈希函数的 Python 模块。