Модуль hashlib реализует общий интерфейс для множества различных безопасных алгоритмов хеширования и дайджеста сообщений. В модуль включены алгоритмы безопасного хеширования, такие как FIPS SHA1, SHA224, SHA256, SHA384 и SHA512, определенные в FIPS 180-2, а также алгоритм MDA RSA, определенный в Интернете RFC 1321.
Термины "безопасный хеш" и "дайджест сообщения" являются взаимозаменяемыми:
Примечание.
adler32 или crc32, то они доступны в модуле zlib.hash().Предупреждение.
Некоторые алгоритмы имеют известные недостатки хеш-коллизий.
Модуль hashlib поддерживает одну функцию для каждого алгоритма хеширования, названную так-же как называется сам алгоритм. Например: для создания хеш-объекта для алгоритма хеширования SHA-256, то используйте функцию hashlib.sha256().
Все функции возвращают хеш-объект с одинаковым простым интерфейсом. Этот объект можно "кормить" байтоподобными объектами, используя метод HASH.update(). В любой момент можно запросить дайджест(хеш) о конкатенации данных, переданных в него, используя методы HASH.digest() или HASH.hexdigest().
Новое в Python 3.6: добавлены hashlib.blake2b() и hashlib.blake2s().
Новое в Python 3.9: теперь все конструкторы модуля hashlib принимают ключевой аргумент usedforsecurity, используемый для обеспечения безопасности со значением по умолчанию True. Значение False позволяет использовать небезопасные и заблокированные алгоритмы хеширования в ограниченных средах. Значение False указывает, что алгоритм хеширования не используется в контексте безопасности, например как не криптографическая функция одностороннего сжатия.
Модуль hashlib теперь использует SHA3 и SHAKE из OpenSSL 1.1.1 и новее.
>>> import hashlib >>> hash = hashlib.sha256() >>> hash.update(b"Nobody inspects") >>> hash.update(b" the spammish repetition") >>> hash.hexdigest() # '031edd7d41651593c5fe5c006fa5752b37fddff7bc4e843aa6af0c950f4b9406' >>> hash.digest_size 32 >>> hash.block_size 64
Примечания:
HASH.update().HASH.update() не поддерживается, поскольку хеши работают с байтами, а не с символами.Функции алгоритмов хеширования, которые всегда присутствуют в модуле hashlib, являются hashlib.sha1(), hashlib.sha224(), hashlib.sha256(), hashlib.sha384(), hashlib.sha512(), hashlib.blake2b() и hashlib.blake2s().
Внимание! Алгоритм
hashlib.md5()также доступен в версиях до Python3.7, но этот алгоритм хеширования полностью удален с версии Python3.8.
Дополнительные функции алгоритмов также могут быть доступны в зависимости от библиотеки OpenSSL, которую Python использует на запущенной платформе. На большинстве платформ также доступны hashlib.sha3_224(), hashlib.sha3_256(), hashlib.sha3_384(), hashlib.sha3_512(), hashlib.shake_128(), hashlib.shake_256().
>>> import hashlib # список алгоритмов хеширования, которые # гарантированно присутствуют на любых платформах. >>> hashlib.algorithms_guaranteed # {'sha3_512', 'sha384', 'md5', 'shake_128', # 'sha256', 'sha3_256', 'sha3_224', 'sha512', # 'blake2s', 'sha3_384', 'sha224', 'shake_256', # 'blake2b', 'sha1'} # быстро вычислить хеш строки >>> hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest() # 'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'
Пример вычисление хеш суммы файла.
import hashlib # Так как алгоритмы работают с байтами то и # файл надо открывать на чтение байтов 'rb' with open('/usr/bin/python3', 'rb') as f: hsh = hashlib.sha1() while True: data = f.read(2048) if not data: break hsh.update(data) rez = hsh.hexdigest() >>> print(rez) # ab7701b3f3073c2f23744d0d558ed47aa59f400d