hmac — 用于消息身份验证的密钥散列 — Python 文档

来自菜鸟教程
Python/docs/3.10/library/hmac
跳转至:导航、​搜索

hmac — 用于消息认证的密钥散列

源代码: :source:`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 可以是哈希算法的名称。

hmac.digest(key, msg, digest)

返回给定秘密 keydigestmsg 的摘要。 该函数等效于 HMAC(key, msg, digest).digest(),但使用优化的 C 或内联实现,对于适合内存的消息来说速度更快。 参数 keymsgdigestnew() 中的含义相同。

CPython 实现细节,优化的 C 实现仅在 digest 是字符串和摘要算法名称时使用,OpenSSL 支持该算法。

3.7 版中的新功能。

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 字节。

警告

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

HMAC.hexdigest()

digest() 类似,除了摘要作为字符串返回,其长度是仅包含十六进制数字的两倍。 这可用于在电子邮件或其他非二进制环境中安全地交换值。

警告

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

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

散列对象具有以下属性:

HMAC.digest_size
生成的 HMAC 摘要的大小(以字节为单位)。
HMAC.block_size

哈希算法的内部块大小(以字节为单位)。

3.4 版中的新功能。

HMAC.name

此 HMAC 的规范名称,始终小写,例如 hmac-md5

3.4 版中的新功能。

自 3.9 版起已弃用:未记录的属性 HMAC.digest_consHMAC.innerHMAC.outer 是内部实现细节,将在 Python 3.10 中删除。


该模块还提供以下辅助功能:

hmac.compare_digest(a, b)

返回 a == b。 此函数使用旨在通过避免基于内容的短路行为来防止时序分析的方法,使其适用于密码学。 ab 必须是相同的类型:str(仅限 ASCII,例如 由 HMAC.hexdigest()) 或 bytes-like object 返回。

笔记

如果 ab 的长度不同,或者发生错误,则理论上可以通过时序攻击揭示有关 a的类型和长度的信息]b——但不是它们的值。

3.3 版中的新功能。

在 3.10 版更改:该函数在可用时在内部使用 OpenSSL 的 CRYPTO_memcmp()

也可以看看

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