14.2. hmac用于消息认证的加密哈希算法

2.2 版中新增。

源程序代码: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 字节。

警告

在验证过程中,当比较digest()的输出与外部提供的摘要时,建议使用compare_digest()函数而不是==运算符,以减少对时序攻击的脆弱性。

HMAC.hexdigest()

类似digest(),但是返回的摘要的字符串的长度翻倍,且只包含十六进制数字。这可用于在电子邮件或其它非二进制环境中安全交换数据。

警告

在验证过程中,当比较hexdigest()的输出与外部提供的摘要时,建议使用compare_digest()函数而不是==运算符,以减少对时序攻击的脆弱性。

HMAC.copy()

返回 hmac 对象的副本("克隆")。这可以用于更有效地计算分享一个共同的初始子字符串的字符串的摘要。

本模块还提供了以下辅助函数:

hmac.compare_digest(a, b)

返回a == b这个函数使用一种防止时序分析的方法,通过避免基于内容的短路行为,使其适合加密。ab必须是同一类型:unicode类似字节的对象

如果ab长度不同,或者如果发生错误,从理论上讲时序攻击可以揭示ab的类型和长度等有关的信息 —— 但不能得到它们的值。

2.7.7 版中新增。

请参见

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