ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
### 导航 - [索引](../genindex.xhtml "总目录") - [模块](../py-modindex.xhtml "Python 模块索引") | - [下一页](secrets.xhtml "secrets --- Generate secure random numbers for managing secrets") | - [上一页](hashlib.xhtml "hashlib --- 安全哈希与消息摘要") | - ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png) - [Python](https://www.python.org/) » - zh\_CN 3.7.3 [文档](../index.xhtml) » - [Python 标准库](index.xhtml) » - [加密服务](crypto.xhtml) » - $('.inline-search').show(0); | # [`hmac`](#module-hmac "hmac: Keyed-Hashing for Message Authentication (HMAC) implementation") --- 基于密钥的消息验证 **Source code:** [Lib/hmac.py](https://github.com/python/cpython/tree/3.7/Lib/hmac.py) \[https://github.com/python/cpython/tree/3.7/Lib/hmac.py\] - - - - - - This module implements the HMAC algorithm as described by [**RFC 2104**](https://tools.ietf.org/html/rfc2104.html) \[https://tools.ietf.org/html/rfc2104.html\]. `hmac.``new`(*key*, *msg=None*, *digestmod=None*)Return a new hmac object. *key* is a bytes or bytearray object giving the secret key. If *msg* is present, the method call `update(msg)` is made. *digestmod* is the digest name, digest constructor or module for the HMAC object to use. It supports any name suitable to [`hashlib.new()`](hashlib.xhtml#hashlib.new "hashlib.new") and defaults to the `hashlib.md5` constructor. 在 3.4 版更改: Parameter *key* can be a bytes or bytearray object. Parameter *msg* can be of any type supported by [`hashlib`](hashlib.xhtml#module-hashlib "hashlib: Secure hash and message digest algorithms."). Parameter *digestmod* can be the name of a hash algorithm. Deprecated since version 3.4, will be removed in version 3.8: MD5 as implicit default digest for *digestmod* is deprecated. `hmac.``digest`(*key*, *msg*, *digest*)Return digest of *msg* for given secret *key* and *digest*. The function is equivalent to `HMAC(key, msg, digest).digest()`, but uses an optimized C or inline implementation, which is faster for messages that fit into memory. The parameters *key*, *msg*, and *digest* have the same meaning as in [`new()`](#hmac.new "hmac.new"). CPython implementation detail, the optimized C implementation is only used when *digest* is a string and name of a digest algorithm, which is supported by OpenSSL. 3\.7 新版功能. An HMAC object has the following methods: `HMAC.``update`(*msg*)Update the hmac object with *msg*. Repeated calls are equivalent to a single call with the concatenation of all the arguments: `m.update(a); m.update(b)` is equivalent to `m.update(a + b)`. 在 3.4 版更改: Parameter *msg* can be of any type supported by [`hashlib`](hashlib.xhtml#module-hashlib "hashlib: Secure hash and message digest algorithms."). `HMAC.``digest`()Return the digest of the bytes passed to the [`update()`](#hmac.HMAC.update "hmac.HMAC.update") method so far. This bytes object will be the same length as the *digest\_size* of the digest given to the constructor. It may contain non-ASCII bytes, including NUL bytes. 警告 When comparing the output of [`digest()`](#hmac.digest "hmac.digest") to an externally-supplied digest during a verification routine, it is recommended to use the [`compare_digest()`](#hmac.compare_digest "hmac.compare_digest") function instead of the `==` operator to reduce the vulnerability to timing attacks. `HMAC.``hexdigest`()Like [`digest()`](#hmac.digest "hmac.digest") except the digest is returned as a string twice the length containing only hexadecimal digits. This may be used to exchange the value safely in email or other non-binary environments. 警告 When comparing the output of [`hexdigest()`](#hmac.HMAC.hexdigest "hmac.HMAC.hexdigest") to an externally-supplied digest during a verification routine, it is recommended to use the [`compare_digest()`](#hmac.compare_digest "hmac.compare_digest") function instead of the `==` operator to reduce the vulnerability to timing attacks. `HMAC.``copy`()Return a copy ("clone") of the hmac object. This can be used to efficiently compute the digests of strings that share a common initial substring. A hash object has the following attributes: `HMAC.``digest_size`The size of the resulting HMAC digest in bytes. `HMAC.``block_size`The internal block size of the hash algorithm in bytes. 3\.4 新版功能. `HMAC.``name`The canonical name of this HMAC, always lowercase, e.g. `hmac-md5`. 3\.4 新版功能. This module also provides the following helper function: `hmac.``compare_digest`(*a*, *b*)Return `a == b`. This function uses an approach designed to prevent timing analysis by avoiding content-based short circuiting behaviour, making it appropriate for cryptography. *a* and *b* must both be of the same type: either [`str`](stdtypes.xhtml#str "str") (ASCII only, as e.g. returned by [`HMAC.hexdigest()`](#hmac.HMAC.hexdigest "hmac.HMAC.hexdigest")), or a [bytes-like object](../glossary.xhtml#term-bytes-like-object). 注解 If *a* and *b* are of different lengths, or if an error occurs, a timing attack could theoretically reveal information about the types and lengths of *a* and *b*—but not their values. 3\.3 新版功能. 参见 Module [`hashlib`](hashlib.xhtml#module-hashlib "hashlib: Secure hash and message digest algorithms.")The Python module providing secure hash functions. ### 导航 - [索引](../genindex.xhtml "总目录") - [模块](../py-modindex.xhtml "Python 模块索引") | - [下一页](secrets.xhtml "secrets --- Generate secure random numbers for managing secrets") | - [上一页](hashlib.xhtml "hashlib --- 安全哈希与消息摘要") | - ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png) - [Python](https://www.python.org/) » - zh\_CN 3.7.3 [文档](../index.xhtml) » - [Python 标准库](index.xhtml) » - [加密服务](crypto.xhtml) » - $('.inline-search').show(0); | © [版权所有](../copyright.xhtml) 2001-2019, Python Software Foundation. Python 软件基金会是一个非盈利组织。 [请捐助。](https://www.python.org/psf/donations/) 最后更新于 5月 21, 2019. [发现了问题](../bugs.xhtml)? 使用[Sphinx](http://sphinx.pocoo.org/)1.8.4 创建。