hmac — Хеширование с ключом для аутентификации сообщений
Исходный код: Lib/hmac.py
Этот модуль реализует алгоритм HMAC, описанный в RFC 2104. Интерфейс позволяет использовать любую хеш-функцию с фиксированным размером дайджеста. В частности, функции с расширяемым выходом, такие как SHAKE-128 или SHAKE-256, нельзя использовать с HMAC.
-
hmac.new(key, msg=None, digestmod) -
Возвращает новый объект hmac. key — объект bytes или bytearray, содержащий секретный ключ. Если задан msg, выполняется вызов метода
update(msg). digestmod — имя дайджеста, конструктор дайджеста или модуль для объекта HMAC. Это может быть любое имя, допустимое дляhashlib.new(). Несмотря на позицию аргумента, он является обязательным.Изменено в версии 3.4: Параметр key может быть объектом bytes или bytearray. Параметр msg может иметь любой тип, поддерживаемый
hashlib. Параметр digestmod может быть именем алгоритма хеширования.Изменено в версии 3.8: Аргумент digestmod теперь обязателен. Передавайте его как аргумент-ключевое слово, чтобы избежать неудобств, если у вас нет начального msg.
-
hmac.digest(key, msg, digest) -
Возвращает дайджест msg для заданных секретного key и digest. Эта функция эквивалентна
HMAC(key, msg, digest).digest(), но использует оптимизированную реализацию на C или встроенную реализацию, которая быстрее работает с сообщениями, помещающимися в память. Параметры key, msg и digest имеют то же значение, что и вnew().Особенность реализации в CPython: оптимизированная реализация на C используется только в том случае, если digest — это строка с именем алгоритма дайджеста, поддерживаемого OpenSSL.
Добавлено в версии 3.7.
-
class hmac.HMAC -
Объект HMAC имеет следующие методы:
-
HMAC.update(msg) -
Обновляет объект hmac данными msg. Повторные вызовы эквивалентны одному вызову с конкатенацией всех аргументов:
m.update(a); m.update(b)эквивалентноm.update(a + b).Изменено в версии 3.4: Параметр msg может иметь любой тип, поддерживаемый
hashlib.
-
HMAC.digest() -
Возвращает дайджест байтов, переданных методу
update()на данный момент. Длина этого объекта bytes будет равна значению digest_size дайджеста, заданного конструктору. Он может содержать байты, не относящиеся к ASCII, включая нулевые байты.Предупреждение
При сравнении результата
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.10: Удалены недокументированные атрибуты HMAC.digest_cons, HMAC.inner и HMAC.outer.
Этот модуль также предоставляет следующую вспомогательную функцию:
-
hmac.compare_digest(a, b) -
Возвращает
a == b. Эта функция использует подход, призванный предотвратить анализ времени выполнения за счёт отказа от досрочного завершения на основе содержимого, что делает её подходящей для криптографии. a и b должны иметь один и тот же тип: либоstr(только ASCII, например, возвращаемаяHMAC.hexdigest()), либо объект, подобный bytes.Примечание
Если длины a и b различаются или возникает ошибка, теоретически атака по времени может раскрыть информацию о типах и длинах a и b, но не об их значениях.
Добавлено в версии 3.3.
Изменено в версии 3.10: При наличии OpenSSL функция использует внутри
CRYPTO_memcmp().
См. также
-
Modulehashlib -
Модуль Python, предоставляющий криптографически стойкие хеш-функции.
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/hmac.html