hmac.md
1> **Источник:** https://python-all.ru/3/library/hmac.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `hmac` – хэширование с ключом для аутентификации сообщений89**Исходный код:** [Lib/hmac.py](https://python-all.ru/src/3.14/Lib/hmac.py)1011---1213Этот модуль реализует алгоритм HMAC, описанный в [**RFC 2104**](https://python-all.ru/3/library/hmac.html). Интерфейс позволяет использовать любую хэш-функцию с *фиксированным* размером дайджеста. В частности, функции с расширяемым выходом, такие как SHAKE-128 или SHAKE-256, не могут использоваться с HMAC.1415#### `hmac.new(key, msg=None, digestmod)`1617Возвращает новый объект hmac. *key* – это объект bytes или bytearray, задающий секретный ключ. Если *msg* передан, то производится вызов метода `update(msg)`. *digestmod* – это имя дайджеста, конструктор дайджеста или модуль, который должен использовать объект HMAC. Это может быть любое имя, подходящее для [`hashlib.new()`](https://python-all.ru/3/library/hashlib.html#hashlib.new). Несмотря на позицию аргумента, он обязателен.1819Изменено в версии 3.4: Параметр *key* может быть объектом bytes или bytearray. Параметр *msg* может быть любого типа, поддерживаемого [`hashlib`](https://python-all.ru/3/library/hashlib.html#module-hashlib). Параметр *digestmod* может быть именем хэш-алгоритма.2021Изменено в версии 3.8: Аргумент *digestmod* теперь обязателен. Передавайте его в виде именованного аргумента, чтобы избежать неудобств при отсутствии начального *msg*.2223#### `hmac.digest(key, msg, digest)`2425Возвращает дайджест *msg* для заданных секретного *ключа* и *дайджеста*. Эта функция эквивалентна `HMAC(key, msg, digest).digest()`, но использует оптимизированную реализацию на C или встроенную реализацию, которая быстрее для сообщений, помещающихся в память. Параметры *key*, *msg* и *digest* имеют тот же смысл, что и в [`new()`](https://python-all.ru/3/library/hmac.html#hmac.new).2627Особая реализация CPython: оптимизированная реализация на C используется только в том случае, если *digest* является строкой и именем алгоритма дайджеста, поддерживаемого OpenSSL.2829Добавлено в версии 3.7.3031#### `class hmac.HMAC`3233Объект HMAC имеет следующие методы:3435#### `HMAC.update(msg)`3637Обновляет объект hmac с помощью *msg*. Повторные вызовы эквивалентны одному вызову с объединением всех аргументов: `m.update(a); m.update(b)` эквивалентно `m.update(a + b)`.3839Изменено в версии 3.4: Параметр *msg* может быть любого типа, поддерживаемого [`hashlib`](https://python-all.ru/3/library/hashlib.html#module-hashlib).4041#### `HMAC.digest()`4243Возвращает дайджест байтов, переданных методу [`update()`](https://python-all.ru/3/library/hmac.html#hmac.HMAC.update) на данный момент. Этот объект bytes будет той же длины, что и *digest\_size* дайджеста, переданного конструктору. Он может содержать не-ASCII байты, включая нулевые байты.4445> **Предупреждение**46>47> При сравнении вывода `digest()` с внешне предоставленным дайджестом в процессе верификации рекомендуется использовать функцию [`compare_digest()`](https://python-all.ru/3/library/hmac.html#hmac.compare_digest) вместо оператора `==`, чтобы снизить уязвимость к атакам по времени.4849#### `HMAC.hexdigest()`5051Как [`digest()`](https://python-all.ru/3/library/hmac.html#hmac.digest), за исключением того, что дайджест возвращается в виде строки двойной длины, содержащей только шестнадцатеричные цифры. Это может использоваться для безопасного обмена значением по электронной почте или в других небинарных средах.5253> **Предупреждение**54>55> При сравнении вывода `hexdigest()` с внешне предоставленным дайджестом в процессе верификации рекомендуется использовать функцию [`compare_digest()`](https://python-all.ru/3/library/hmac.html#hmac.compare_digest) вместо оператора `==`, чтобы снизить уязвимость к атакам по времени.5657#### `HMAC.copy()`5859Возвращает копию («клон») объекта hmac. Это может использоваться для эффективного вычисления дайджестов строк, имеющих общую начальную подстроку.6061Хэш-объект имеет следующие атрибуты:6263#### `HMAC.digest_size`6465Размер результирующего дайджеста HMAC в байтах.6667#### `HMAC.block_size`6869Внутренний размер блока хэш-алгоритма в байтах.7071Добавлено в версии 3.4.7273#### `HMAC.name`7475Каноническое имя данного HMAC, всегда в нижнем регистре, например `hmac-md5`.7677Добавлено в версии 3.4.7879Изменено в версии 3.10: Удалены недокументированные атрибуты `HMAC.digest_cons`, `HMAC.inner`, и `HMAC.outer`.8081Этот модуль также предоставляет следующую вспомогательную функцию:8283#### `hmac.compare_digest(a, b)`8485Возвращает `a == b`. Эта функция использует подход, предотвращающий анализ времени выполнения за счёт отказа от короткого замыкания на основе содержимого, что делает её подходящей для криптографии. *a* и *b* должны быть одного типа: либо [`str`](https://python-all.ru/3/library/stdtypes.html#str) (только ASCII, например, возвращаемый [`HMAC.hexdigest()`](https://python-all.ru/3/library/hmac.html#hmac.HMAC.hexdigest)), либо [байтоподобный объект](https://python-all.ru/3/glossary.html#term-bytes-like-object).8687> **Примечание**88>89> Если *a* и *b* имеют разную длину или возникает ошибка, теоретически атака по времени может раскрыть информацию о типах и длинах *a* и *b*, но не их значения.9091Добавлено в версии 3.3.9293Изменено в версии 3.10: Функция использует `CRYPTO_memcmp()` из OpenSSL при наличии.9495> **См. также**96>97> **Модуль [`hashlib`](https://python-all.ru/3/library/hashlib.html#module-hashlib)**98>99> Модуль Python, предоставляющий безопасные хеш-функции.100