Документация Python неофициальный перевод

hmac.md

86 строк · 7.0 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.6/library/hmac.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 15.2. [`hmac`](https://python-all.ru/3.6/library/hmac.html#module-hmac) – Ключевое хэширование для аутентификации сообщений89**Исходный код:** [Lib/hmac.py](https://python-all.ru/src/3.6/Lib/hmac.py)1011---1213Этот модуль реализует алгоритм HMAC, описанный в [**RFC 2104**](https://python-all.ru/3.6/library/hmac.html).1415#### `hmac.new(key, msg=None, digestmod=None)`1617Возвращает новый объект hmac. *key* представляет собой объект bytes или bytearray, содержащий секретный ключ. Если задан *msg*, выполняется вызов метода `update(msg)`. *digestmod* – это имя дайджеста, конструктор дайджеста или модуль, используемый объектом HMAC. Он поддерживает любое имя, подходящее для [`hashlib.new()`](https://python-all.ru/3.6/library/hashlib.html#hashlib.new), и по умолчанию использует конструктор `hashlib.md5`.1819Изменено в версии 3.4: Параметр *key* может быть объектом bytes или bytearray. Параметр *msg* может быть любого типа, поддерживаемого [`hashlib`](https://python-all.ru/3.6/library/hashlib.html#module-hashlib). Параметр *digestmod* может быть именем хэш-алгоритма.2021Устарело с версии 3.4: MD5 как неявный дайджест по умолчанию для *digestmod* устарел.2223Объект HMAC имеет следующие методы:2425#### `HMAC.update(msg)`2627Обновляет объект hmac с помощью *msg*. Повторные вызовы эквивалентны одному вызову с объединением всех аргументов: `m.update(a); m.update(b)` эквивалентно `m.update(a + b)`.2829Изменено в версии 3.4: Параметр *msg* может быть любого типа, поддерживаемого [`hashlib`](https://python-all.ru/3.6/library/hashlib.html#module-hashlib).3031#### `HMAC.digest()`3233Возвращает дайджест байтов, переданных методу [`update()`](https://python-all.ru/3.6/library/hmac.html#hmac.HMAC.update) на данный момент. Этот объект bytes будет той же длины, что и *digest\_size* дайджеста, переданного конструктору. Он может содержать не-ASCII байты, включая нулевые байты.3435> **Предупреждение**36>37> При сравнении вывода [`digest()`](https://python-all.ru/3.6/library/hmac.html#hmac.HMAC.digest) с внешне предоставленным дайджестом во время процедуры верификации рекомендуется использовать функцию [`compare_digest()`](https://python-all.ru/3.6/library/hmac.html#hmac.compare_digest) вместо оператора `==`, чтобы снизить уязвимость к атакам по времени.3839#### `HMAC.hexdigest()`4041Как [`digest()`](https://python-all.ru/3.6/library/hmac.html#hmac.HMAC.digest), за исключением того, что дайджест возвращается в виде строки двойной длины, содержащей только шестнадцатеричные цифры. Это может использоваться для безопасного обмена значением по электронной почте или в других небинарных средах.4243> **Предупреждение**44>45> При сравнении вывода [`hexdigest()`](https://python-all.ru/3.6/library/hmac.html#hmac.HMAC.hexdigest) с внешне предоставленным дайджестом во время процедуры верификации рекомендуется использовать функцию [`compare_digest()`](https://python-all.ru/3.6/library/hmac.html#hmac.compare_digest) вместо оператора `==`, чтобы снизить уязвимость к атакам по времени.4647#### `HMAC.copy()`4849Возвращает копию («клон») объекта hmac. Это может использоваться для эффективного вычисления дайджестов строк, имеющих общую начальную подстроку.5051Хэш-объект имеет следующие атрибуты:5253#### `HMAC.digest_size`5455Размер результирующего дайджеста HMAC в байтах.5657#### `HMAC.block_size`5859Внутренний размер блока хэш-алгоритма в байтах.6061Новое в версии 3.4.6263#### `HMAC.name`6465Каноническое имя данного HMAC, всегда в нижнем регистре, например `hmac-md5`.6667Новое в версии 3.4.6869Этот модуль также предоставляет следующую вспомогательную функцию:7071#### `hmac.compare_digest(a, b)`7273Возвращает `a == b`. Эта функция использует подход, предотвращающий анализ времени выполнения за счёт отказа от короткого замыкания на основе содержимого, что делает её подходящей для криптографии. *a* и *b* должны быть одного типа: либо [`str`](https://python-all.ru/3.6/library/stdtypes.html#str) (только ASCII, например, возвращаемый [`HMAC.hexdigest()`](https://python-all.ru/3.6/library/hmac.html#hmac.HMAC.hexdigest)), либо [байтоподобный объект](https://python-all.ru/3.6/glossary.html#term-bytes-like-object).7475> **Примечание**76>77> Если *a* и *b* имеют разную длину или возникает ошибка, теоретически атака по времени может раскрыть информацию о типах и длинах *a* и *b*, но не их значения.7879Новое в версии 3.3.8081> **См. также**82>83> **Модуль [`hashlib`](https://python-all.ru/3.6/library/hashlib.html#module-hashlib)**84>85> Модуль Python, предоставляющий безопасные хеш-функции.86