15.2. hmac – Хеширование с ключом для аутентификации сообщений¶hmac – Keyed-Hashing for Message Authentication
Исходный код: Lib/hmac.py
Этот модуль реализует алгоритм HMAC, описанный в RFC 2104.
- hmac.new(key, msg=None, digestmod=None)¶
Возвращает новый объект hmac. key – это байтовый объект, содержащий секретный ключ. Если msg указан, вызывается метод update(msg). digestmod – это конструктор дайджеста или модуль, используемый объектом HMAC. По умолчанию используется конструктор hashlib.md5.
Объект HMAC имеет следующие методы:
- HMAC.update(msg)¶
Обновляет объект hmac с помощью байтового объекта msg. Повторные вызовы эквивалентны одному вызову с конкатенацией всех аргументов: m.update(a); m.update(b) эквивалентно m.update(a + b).
- HMAC.digest()¶
Возвращает дайджест байтов, переданных методу update() на данный момент. Этот объект bytes будет такой же длины, как digest_size дайджеста, переданного конструктору. Он может содержать не-ASCII байты, включая нулевые байты (NUL).
Предупреждение
При сравнении вывода digest() с внешне предоставленным дайджестом в процедуре проверки рекомендуется использовать функцию compare_digest() вместо оператора == для уменьшения уязвимости к атакам по времени.
- HMAC.hexdigest()¶
Как digest(), за исключением того, что дайджест возвращается в виде строки вдвое большей длины, содержащей только шестнадцатеричные цифры. Это может использоваться для безопасного обмена значением в электронных письмах или других недвоичных средах.
Предупреждение
При сравнении вывода hexdigest() с внешне предоставленным дайджестом в процедуре проверки рекомендуется использовать функцию compare_digest() вместо оператора == для уменьшения уязвимости к атакам по времени.
- HMAC.copy()¶
Возвращает копию («клон») объекта hmac. Это может использоваться для эффективного вычисления дайджестов строк, имеющих общую начальную подстроку.
Этот модуль также предоставляет следующую вспомогательную функцию:
- hmac.compare_digest(a, b)¶
Возвращает a == b. Эта функция использует подход, предназначенный для предотвращения анализа времени выполнения путём избегания короткого замыкания на основе содержимого, что делает её подходящей для криптографии. a и b должны быть одного типа: либо str (только ASCII, как, например, возвращается HMAC.hexdigest()), либо bytes-like object.
Примечание
Если a и b имеют разную длину, или если возникает ошибка, атака по времени теоретически может раскрыть информацию о типах и длине a и b, но не об их значениях.
Новое в версии 3.3.
См. также
- Модуль hashlib
- Модуль Python, предоставляющий безопасные хеш-функции.