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

hashlib.md

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

1> **Источник:** https://python-all.ru/3.0/library/hashlib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `hashlib` – Безопасные хеши и дайджесты сообщений89Этот модуль реализует общий интерфейс для множества различных алгоритмов безопасного хеширования и дайджестов сообщений. Включены алгоритмы безопасного хеширования FIPS: SHA1, SHA224, SHA256, SHA384 и SHA512 (определены в FIPS 180-2), а также алгоритм MD5 от RSA (определён в [**RFC 1321**](https://python-all.ru/3.0/library/hashlib.html)). Термины «безопасный хеш» и «дайджест сообщения» взаимозаменяемы. Старые алгоритмы назывались дайджестами сообщений. Современный термин – безопасный хеш.1011> **Примечание**12>13> Если нужны хеш-функции adler32 или crc32, они доступны в модуле [`zlib`](https://python-all.ru/3.0/library/zlib.html#module-zlib).1415> **Предупреждение**16>17> Некоторые алгоритмы имеют известные уязвимости к коллизиям хешей; см. FAQ в конце.1819Для каждого типа *хеша* существует один метод-конструктор. Все они возвращают объект хеша с одинаковым простым интерфейсом. Например: используйте `sha1()` для создания объекта хеша SHA1. Затем можно передавать этому объекту объекты, поддерживающие буферный интерфейс (обычно объекты [`bytes`](https://python-all.ru/3.0/library/functions.html#bytes)), с помощью метода `update()`. В любой момент можно запросить *дайджест* конкатенации всех переданных на данный момент данных, используя методы `digest()` или `hexdigest()`.2021> **Примечание**22>23> Передача строковых объектов в `update()` не поддерживается, так как хеши работают с байтами, а не с символами.2425Конструкторы хеш-алгоритмов, которые всегда присутствуют в этом модуле: `md5()`, `sha1()`, `sha224()`, `sha256()`, `sha384()` и `sha512()`. Дополнительные алгоритмы могут быть доступны в зависимости от библиотеки OpenSSL, которую Python использует на вашей платформе.2627Например, чтобы получить дайджест байтовой строки `b'Nobody inspects the spammish repetition'`:2829```python30>>> import hashlib31>>> m = hashlib.md5()32>>> m.update(b"Nobody inspects")33>>> m.update(b" the spammish repetition")34>>> m.digest()35b'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'36>>> m.digest_size371638>>> m.block_size396440```4142Более компактно:4344```python45>>> hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest()46'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'47```4849A 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.5051Использование `new()` с алгоритмом из OpenSSL:5253```python54>>> h = hashlib.new('ripemd160')55>>> h.update(b"Nobody inspects the spammish repetition")56>>> h.hexdigest()57'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc'58```5960Следующие значения предоставляются в качестве константных атрибутов хеш-объектов, возвращаемых конструкторами:6162#### `[hashlib.digest_size]hashlib.digest_size`6364Размер результирующего хеша в байтах.6566#### `[hashlib.block_size]hashlib.block_size`6768Внутренний размер блока хэш-алгоритма в байтах.6970Хеш-объект имеет следующие методы:7172#### `[hashlib.hash.update]hash.update(arg)`7374Обновляет хеш-объект с помощью объекта7576*arg*7778, который должен интерпретироваться как буфер байтов. Многократные вызовы эквивалентны одному вызову с конкатенацией всех аргументов:7980`m.update(a); m.update(b)`8182эквивалентно8384`m.update(a+b)`8586.8788#### `[hashlib.hash.digest]hash.digest()`8990Возвращает дайджест данных, переданных в метод9192[`update()`](https://python-all.ru/3.0/library/hashlib.html#hashlib.hash.update)9394на данный момент. Это байтовый массив размера9596[`digest_size`](https://python-all.ru/3.0/library/hashlib.html#hashlib.digest_size)9798, который может содержать байты в диапазоне от 0 до 255.99100#### `[hashlib.hash.hexdigest]hash.hexdigest()`101102Как и103104[`digest()`](https://python-all.ru/3.0/library/hashlib.html#hashlib.hash.digest)105106, за исключением того, что дайджест возвращается в виде строкового объекта двойной длины, содержащего только шестнадцатеричные цифры. Это можно использовать для безопасного обмена значением в электронной почте или других недвоичных средах.107108#### `[hashlib.hash.copy]hash.copy()`109110Возвращает копию («клон») хеш-объекта. Это можно использовать для эффективного вычисления дайджестов данных, имеющих общую начальную подстроку.111112> **См. также**113>114> **Модуль [`hmac`](https://python-all.ru/3.0/library/hmac.html#module-hmac)**115>116> Модуль для генерации кодов аутентификации сообщений с использованием хешей.117>118> **Модуль [`base64`](https://python-all.ru/3.0/library/base64.html#module-base64)**119>120> Другой способ кодирования двоичных хешей для сред, не предназначенных для работы с двоичными данными.121>122> **[http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf](https://python-all.ru/3.0/library/hashlib.html)**123>124> Публикация FIPS 180-2, описывающая безопасные хэш-алгоритмы.125>126> **[http://www.cryptography.com/cnews/hash.html](https://python-all.ru/3.0/library/hashlib.html)**127>128> FAQ по коллизиям хешей: информация о том, какие алгоритмы имеют известные проблемы и как это влияет на их использование.129