hashlib.md
1> **Источник:** https://python-all.ru/3.1/library/hashlib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 14.1. `hashlib` – Безопасные хеши и дайджесты сообщений89Этот модуль реализует общий интерфейс для множества различных алгоритмов безопасного хеширования и дайджестов сообщений. Включены алгоритмы безопасного хеширования FIPS: SHA1, SHA224, SHA256, SHA384 и SHA512 (определены в FIPS 180-2), а также алгоритм MD5 от RSA (определён в [**RFC 1321**](https://python-all.ru/3.1/library/hashlib.html)). Термины «безопасный хеш» и «дайджест сообщения» взаимозаменяемы. Старые алгоритмы назывались дайджестами сообщений. Современный термин – безопасный хеш.1011> **Примечание**12>13> Если нужны хеш-функции adler32 или crc32, они доступны в модуле [`zlib`](https://python-all.ru/3.1/library/zlib.html#module-zlib).1415> **Предупреждение**16>17> Некоторые алгоритмы имеют известные уязвимости к коллизиям хешей; см. FAQ в конце.1819Для каждого типа *хеша* существует один метод-конструктор. Все они возвращают объект хеша с одинаковым простым интерфейсом. Например: используйте `sha1()` для создания объекта хеша SHA1. Затем можно передавать этому объекту объекты, поддерживающие буферный интерфейс (обычно объекты [`bytes`](https://python-all.ru/3.1/library/functions.html#bytes)), с помощью метода `update()`. В любой момент можно запросить *дайджест* конкатенации всех переданных на данный момент данных, используя методы `digest()` или `hexdigest()`.2021> **Примечание**22>23> Для повышения производительности в многопоточных приложениях GIL Python освобождается для строк длиннее 2047 байт при создании объекта или при вызове update.2425> **Примечание**26>27> Передача строковых объектов в `update()` не поддерживается, так как хеши работают с байтами, а не с символами.2829Конструкторы хеш-алгоритмов, которые всегда присутствуют в этом модуле: `md5()`, `sha1()`, `sha224()`, `sha256()`, `sha384()` и `sha512()`. Дополнительные алгоритмы могут быть доступны в зависимости от библиотеки OpenSSL, которую Python использует на вашей платформе.3031Например, чтобы получить дайджест байтовой строки `b'Nobody inspects the spammish repetition'`:3233```python34>>> import hashlib35>>> m = hashlib.md5()36>>> m.update(b"Nobody inspects")37>>> m.update(b" the spammish repetition")38>>> m.digest()39b'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'40>>> m.digest_size411642>>> m.block_size436444```4546Более компактно:4748```python49>>> hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest()50'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'51```5253A generic `new()` constructor that takes the string name of the desired algorithm as its first parameter also exists to allow access to the above listed hashes as well as any other algorithms that your OpenSSL library may offer. The named constructors are much faster than `new()` and should be preferred.5455Использование `new()` с алгоритмом из OpenSSL:5657```python58>>> h = hashlib.new('ripemd160')59>>> h.update(b"Nobody inspects the spammish repetition")60>>> h.hexdigest()61'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc'62```6364Следующие значения предоставляются в качестве константных атрибутов хеш-объектов, возвращаемых конструкторами:6566#### `hash.digest_size`6768Размер результирующего хеша в байтах.6970#### `hash.block_size`7172Внутренний размер блока хэш-алгоритма в байтах.7374Хеш-объект имеет следующие методы:7576#### `hash.update(arg)`7778Обновляет хеш-объект с помощью объекта *arg*, который должен интерпретироваться как буфер байтов. Многократные вызовы эквивалентны одному вызову с конкатенацией всех аргументов: `m.update(a); m.update(b)` эквивалентно `m.update(a+b)`.7980Изменено в версии 3.1: Глобальная блокировка интерпретатора (GIL) Python освобождается, чтобы другие потоки могли выполняться во время обновлений хеша\\nданных размером более 2048 байт при использовании алгоритмов\\nхеширования, предоставленных OpenSSL.8182#### `hash.digest()`8384Возвращает дайджест данных, переданных методу8586[`update()`](https://python-all.ru/3.1/library/hashlib.html#hashlib.hash.update)8788на данный момент. Это объект bytes размером8990[`digest_size`](https://python-all.ru/3.1/library/hashlib.html#hashlib.hash.digest_size)9192, который может содержать байты во всём диапазоне от 0 до 255.9394#### `hash.hexdigest()`9596Как и9798[`digest()`](https://python-all.ru/3.1/library/hashlib.html#hashlib.hash.digest)99100, за исключением того, что дайджест возвращается в виде строкового объекта двойной длины, содержащего только шестнадцатеричные цифры. Это можно использовать для безопасного обмена значением в электронной почте или других недвоичных средах.101102#### `hash.copy()`103104Возвращает копию («клон») хеш-объекта. Это можно использовать для эффективного вычисления дайджестов данных, имеющих общую начальную подстроку.105106> **См. также**107>108> **Модуль [`hmac`](https://python-all.ru/3.1/library/hmac.html#module-hmac)**109>110> Модуль для генерации кодов аутентификации сообщений с использованием хешей.111>112> **Модуль [`base64`](https://python-all.ru/3.1/library/base64.html#module-base64)**113>114> Другой способ кодирования двоичных хешей для сред, не предназначенных для работы с двоичными данными.115>116> **[http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf](https://python-all.ru/3.1/library/hashlib.html)**117>118> Публикация FIPS 180-2, описывающая безопасные хэш-алгоритмы.119>120> **[http://en.wikipedia.org/wiki/Cryptographic\_hash\_function#Cryptographic\_hash\_algorithms](https://python-all.ru/3.1/library/hashlib.html)**121>122> Статья в Википедии с информацией о том, в каких алгоритмах известны проблемы и что это означает для их использования.123