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

hmac.md

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

1> **Источник:** https://python-all.ru/3.3/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.3/library/hmac.html#module-hmac) – Хеширование с ключом для аутентификации сообщений89**Исходный код:** [Lib/hmac.py](https://python-all.ru/src/3.3/Lib/hmac.py)1011---1213Этот модуль реализует алгоритм HMAC, описанный в [**RFC 2104**](https://python-all.ru/3.3/library/hmac.html).1415#### `hmac.new(key, msg=None, digestmod=None)`1617Возвращает новый объект hmac. *key* – это байтовый объект, содержащий секретный ключ. Если *msg* указан, вызывается метод `update(msg)`. *digestmod* – это конструктор дайджеста или модуль, используемый объектом HMAC. По умолчанию используется конструктор `hashlib.md5`.1819Объект HMAC имеет следующие методы:2021#### `HMAC.update(msg)`2223Обновляет объект hmac с помощью байтового объекта *msg*. Повторные вызовы эквивалентны одному вызову с конкатенацией всех аргументов: `m.update(a); m.update(b)` эквивалентно `m.update(a + b)`.2425#### `HMAC.digest()`2627Возвращает дайджест байтов, переданных методу [`update()`](https://python-all.ru/3.3/library/hmac.html#hmac.HMAC.update) на данный момент. Этот объект bytes будет такой же длины, как *digest\_size* дайджеста, переданного конструктору. Он может содержать не-ASCII байты, включая нулевые байты (NUL).2829> **Предупреждение**30>31> При сравнении вывода [`digest()`](https://python-all.ru/3.3/library/hmac.html#hmac.HMAC.digest) с внешне предоставленным дайджестом в процедуре проверки рекомендуется использовать функцию [`compare_digest()`](https://python-all.ru/3.3/library/hmac.html#hmac.compare_digest) вместо оператора `==` для уменьшения уязвимости к атакам по времени.3233#### `HMAC.hexdigest()`3435Как [`digest()`](https://python-all.ru/3.3/library/hmac.html#hmac.HMAC.digest), за исключением того, что дайджест возвращается в виде строки вдвое большей длины, содержащей только шестнадцатеричные цифры. Это может использоваться для безопасного обмена значением в электронных письмах или других недвоичных средах.3637> **Предупреждение**38>39> При сравнении вывода [`hexdigest()`](https://python-all.ru/3.3/library/hmac.html#hmac.HMAC.hexdigest) с внешне предоставленным дайджестом в процедуре проверки рекомендуется использовать функцию [`compare_digest()`](https://python-all.ru/3.3/library/hmac.html#hmac.compare_digest) вместо оператора `==` для уменьшения уязвимости к атакам по времени.4041#### `HMAC.copy()`4243Возвращает копию («клон») объекта hmac. Это может использоваться для эффективного вычисления дайджестов строк, имеющих общую начальную подстроку.4445Этот модуль также предоставляет следующую вспомогательную функцию:4647#### `hmac.compare_digest(a, b)`4849Возвращает `a == b`. Эта функция использует подход, предназначенный для предотвращения анализа времени выполнения путём избегания короткого замыкания на основе содержимого, что делает её подходящей для криптографии. *a* и *b* должны быть одного типа: либо [`str`](https://python-all.ru/3.3/library/stdtypes.html#str) (только ASCII, как, например, возвращается [`HMAC.hexdigest()`](https://python-all.ru/3.3/library/hmac.html#hmac.HMAC.hexdigest)), либо [*bytes-like object*](https://python-all.ru/3.3/glossary.html#term-bytes-like-object).5051> **Примечание**52>53> Если *a* и *b* имеют разную длину, или если возникает ошибка, атака по времени теоретически может раскрыть информацию о типах и длине *a* и *b*, но не об их значениях.5455Новое в версии 3.3.5657> **См. также**58>59> **Модуль [`hashlib`](https://python-all.ru/3.3/library/hashlib.html#module-hashlib)**60>61> Модуль Python, предоставляющий безопасные хеш-функции.62