Модуль hashlib в Python
Python hashlibЭтот модуль в основном используется для хеш-операций.
Хеш — это алгоритм, который отображает входные данные произвольной длины в выходные данные фиксированной длины.
Хеш обычно используется в таких сценариях, как проверка целостности данных и безопасное хранение паролей.
Выходные данные хеш-функции обычно представляют собой строку из кажущихся случайными букв и цифр.
Модуль hashlib предоставляет реализации распространённых хеш-алгоритмов, таких как MD5, SHA-1, SHA-256 и т. д.
Чтобы использовать функцииhashlib, их необходимо сначала импортировать:
import hashlib
Просмотр содержимого модуля 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() / ...: Напрямую использовать конкретный алгоритм хеширования для создания хеш-объекта.
Пример
md5_hash = hashlib.md5(b'EXAMPLE')
print(md5_hash.hexdigest())
Результат вывода:
18fa661e2a4a7dd6471cc1407290cf6e
Методы хеш-объекта
update(data): Обновляет содержимое сообщения хеш-объекта.
Пример
sha256_hash = hashlib.sha256()
sha256_hash.update(b'Hello, ')
sha256_hash.update(b'Example!')
print(sha256_hash.hexdigest())
Результат вывода:
1b56561022276e9a5a8e1cda72e1b39fca6f6074326a74d39f6dfd9540c8ecd7
hexdigest(): Возвращает хеш-значение в шестнадцатеричном представлении.
Пример
md5_hash = hashlib.md5(b'EXAMPLE')
print(md5_hash.hexdigest())
Результат вывода:
18fa661e2a4a7dd6471cc1407290cf6e
digest(): Возвращает хеш-значение в двоичном представлении.
Пример
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
Пример
md5_hash = hashlib.md5(b'EXAMPLE')
print(md5_hash.hexdigest())
Результат вывода:
18fa661e2a4a7dd6471cc1407290cf6e
SHA-1
Пример
sha1_hash = hashlib.sha1(b'EXAMPLE')
print(sha1_hash.hexdigest())
Результат вывода:
341709d0dbc266332f1cbcd8c25fd4a05412b7d4
SHA-256
Пример
sha256_hash = hashlib.sha256(b'EXAMPLE')
print(sha256_hash.hexdigest())
Результат вывода:
673dc967d03201db7fe47b7eabd56c47ca5bc694222de303106a5504e5d0daa8
SHA-512
Пример
sha512_hash = hashlib.sha512(b'EXAMPLE')
print(sha512_hash.hexdigest())
Результат вывода:
7cfe50493eebd48ee7330c797459c2d0d5ca943bd1c84ad7a0b6783b11cd49d06b4a1dc84ee9ea5e20d0bfedbdb67e716500a20e5870abecea3f32dc8484a811
В практических приложениях выбор подходящего алгоритма хеширования зависит от конкретных требований. Следует отметить, что MD5 и SHA-1 уже считаются небезопасными, особенно в сфере безопасности. Рекомендуется использовать более стойкие алгоритмы, такие как SHA-256 или SHA-512.
Распространённые алгоритмы хеширования в модуле hashlib Python и их назначение:
| Название алгоритма | Длина дайджеста (биты) | Длина выходных данных (байты) | Безопасность | Использование |
|---|---|---|---|---|
| md5 | 128 | 16 | Небезопасный | Проверка целостности данных, хранение паролей и т. д. |
| sha1 | 160 | 20 | Небезопасный | Проверка целостности данных, хранение паролей и т. д. |
| sha224 | 224 | 28 | Низкая | Проверка целостности данных, цифровые подписи и т. д. |
| sha256 | 256 | 32 | Средняя | Проверка целостности данных, цифровые подписи и т. д. |
| sha384 | 384 | 48 | Высокая | Цифровые подписи, алгоритмы шифрования и т. д. |
| sha512 | 512 | 64 | Высокая | Цифровые подписи, алгоритмы шифрования и т. д. |
| sha3_224 | 224 | 28 | Высокая | Представитель семейства SHA-3, будущего стандарта, подходит для цифровых подписей и т. д. |
| sha3_256 | 256 | 32 | Высокая | Представитель семейства SHA-3, будущего стандарта, подходит для цифровых подписей и т. д. |
| sha3_384 | 384 | 48 | Высокая | Представитель семейства SHA-3, будущего стандарта, подходит для цифровых подписей и т. д. |
| sha3_512 | 512 | 64 | Высокая | Представитель семейства SHA-3, будущего стандарта, подходит для цифровых подписей и т. д. |
| shake_128 | Переменная | Переменная | Высокая | Серия SHAKE — это версия семейства SHA-3 с переменной длиной, подходящая для различных применений. |
| shake_256 | Переменная | Переменная | Высокая | Серия SHAKE — это версия семейства SHA-3 с переменной длиной, подходящая для различных применений. |
Примечания:
- Длина дайджеста (в битах):Указывает длину дайджеста, выдаваемого хеш-алгоритмом, в битах.
- Длина вывода (в байтах):Указывает длину дайджеста, выдаваемого хеш-алгоритмом, в байтах.
- Безопасность:Указывает уровень безопасности хеш-алгоритма, включая "небезопасный", "низкий", "средний" и "высокий". Это общая классификация; конкретный уровень безопасности также зависит от использования алгоритма и конкретных сценариев атак.