Модуль hashlib в Python

Python hashlibЭтот модуль в основном используется для хеш-операций.

Хеш — это алгоритм, который отображает входные данные произвольной длины в выходные данные фиксированной длины.

Хеш обычно используется в таких сценариях, как проверка целостности данных и безопасное хранение паролей.

Выходные данные хеш-функции обычно представляют собой строку из кажущихся случайными букв и цифр.

Модуль hashlib предоставляет реализации распространённых хеш-алгоритмов, таких как MD5, SHA-1, SHA-256 и т. д.

Чтобы использовать функцииhashlib, их необходимо сначала импортировать:

import hashlib 

Просмотр содержимого модуля hashlib:

Пример

>>> import hashlib
>>> dir(hashlib)
['__all__', '__block_openssl_constructor', '__builtin_constructor_cache', '__builtins__', '__cached__', '__doc__', '__file__', '__get_builtin_constructor', '__loader__', '__name__', '__package__', '__spec__', '_hashlib', 'algorithms_available', 'algorithms_guaranteed', 'blake2b', 'blake2s', 'md5', 'new', 'pbkdf2_hmac', 'scrypt', 'sha1', 'sha224', 'sha256', 'sha384', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'sha512', 'shake_128', 'shake_256']

Ниже приведено введение в некоторые распространённые методы и хеш-алгоритмы в модуле hashlib:

Общие методы

hashlib.new(name, data=None): Создать хеш-объект.

Параметр name — это имя хеш-алгоритма, а параметр data — это данные, которые нужно хешировать.

Пример


import hashlib

sha256_hash = hashlib.new('sha256')
sha256_hash.update(b'EXAMPLE')
print(sha256_hash.hexdigest())

Результат вывода:

673dc967d03201db7fe47b7eabd56c47ca5bc694222de303106a5504e5d0daa8

hashlib.md5() / hashlib.sha1() / hashlib.sha256() / ...: Напрямую использовать конкретный алгоритм хеширования для создания хеш-объекта.

Пример

import hashlib

md5_hash = hashlib.md5(b'EXAMPLE')
print(md5_hash.hexdigest())

Результат вывода:

18fa661e2a4a7dd6471cc1407290cf6e

Методы хеш-объекта

update(data): Обновляет содержимое сообщения хеш-объекта.

Пример

import hashlib

sha256_hash = hashlib.sha256()
sha256_hash.update(b'Hello, ')
sha256_hash.update(b'Example!')
print(sha256_hash.hexdigest())

Результат вывода:

1b56561022276e9a5a8e1cda72e1b39fca6f6074326a74d39f6dfd9540c8ecd7

hexdigest(): Возвращает хеш-значение в шестнадцатеричном представлении.

Пример

import hashlib

md5_hash = hashlib.md5(b'EXAMPLE')
print(md5_hash.hexdigest())

Результат вывода:

18fa661e2a4a7dd6471cc1407290cf6e

digest(): Возвращает хеш-значение в двоичном представлении.

Пример

import hashlib

sha1_hash = hashlib.sha1(b'EXAMPLE')
print(sha1_hash.digest())

Результат вывода:

b'4\x17\t\xd0\xdb\xc2f3/\x1c\xbc\xd8\xc2_\xd4\xa0T\x12\xb7\xd4'

Распространённые алгоритмы хеширования

MD5

Пример

import hashlib

md5_hash = hashlib.md5(b'EXAMPLE')
print(md5_hash.hexdigest())

Результат вывода:

18fa661e2a4a7dd6471cc1407290cf6e

SHA-1

Пример

import hashlib

sha1_hash = hashlib.sha1(b'EXAMPLE')
print(sha1_hash.hexdigest())

Результат вывода:

341709d0dbc266332f1cbcd8c25fd4a05412b7d4

SHA-256

Пример

import hashlib

sha256_hash = hashlib.sha256(b'EXAMPLE')
print(sha256_hash.hexdigest())

Результат вывода:

673dc967d03201db7fe47b7eabd56c47ca5bc694222de303106a5504e5d0daa8

SHA-512

Пример

import hashlib

sha512_hash = hashlib.sha512(b'EXAMPLE')
print(sha512_hash.hexdigest())

Результат вывода:

7cfe50493eebd48ee7330c797459c2d0d5ca943bd1c84ad7a0b6783b11cd49d06b4a1dc84ee9ea5e20d0bfedbdb67e716500a20e5870abecea3f32dc8484a811

В практических приложениях выбор подходящего алгоритма хеширования зависит от конкретных требований. Следует отметить, что MD5 и SHA-1 уже считаются небезопасными, особенно в сфере безопасности. Рекомендуется использовать более стойкие алгоритмы, такие как SHA-256 или SHA-512.

Распространённые алгоритмы хеширования в модуле hashlib Python и их назначение:

Название алгоритмаДлина дайджеста (биты)Длина выходных данных (байты)БезопасностьИспользование
md512816НебезопасныйПроверка целостности данных, хранение паролей и т. д.
sha116020НебезопасныйПроверка целостности данных, хранение паролей и т. д.
sha22422428НизкаяПроверка целостности данных, цифровые подписи и т. д.
sha25625632СредняяПроверка целостности данных, цифровые подписи и т. д.
sha38438448ВысокаяЦифровые подписи, алгоритмы шифрования и т. д.
sha51251264ВысокаяЦифровые подписи, алгоритмы шифрования и т. д.
sha3_22422428ВысокаяПредставитель семейства SHA-3, будущего стандарта, подходит для цифровых подписей и т. д.
sha3_25625632ВысокаяПредставитель семейства SHA-3, будущего стандарта, подходит для цифровых подписей и т. д.
sha3_38438448ВысокаяПредставитель семейства SHA-3, будущего стандарта, подходит для цифровых подписей и т. д.
sha3_51251264ВысокаяПредставитель семейства SHA-3, будущего стандарта, подходит для цифровых подписей и т. д.
shake_128ПеременнаяПеременнаяВысокаяСерия SHAKE — это версия семейства SHA-3 с переменной длиной, подходящая для различных применений.
shake_256ПеременнаяПеременнаяВысокаяСерия SHAKE — это версия семейства SHA-3 с переменной длиной, подходящая для различных применений.

Примечания:

  • Длина дайджеста (в битах):Указывает длину дайджеста, выдаваемого хеш-алгоритмом, в битах.
  • Длина вывода (в байтах):Указывает длину дайджеста, выдаваемого хеш-алгоритмом, в байтах.
  • Безопасность:Указывает уровень безопасности хеш-алгоритма, включая "небезопасный", "низкий", "средний" и "высокий". Это общая классификация; конкретный уровень безопасности также зависит от использования алгоритма и конкретных сценариев атак.
Другие расширения