MD5-хэш в Python

В этой статье будет продемонстрировано, как использовать хеш MD5 с помощью модуля Python hashlib
.
Что такое хеш?
Хеш - это функция, которая принимает данные переменной длины и преобразует их в фиксированную длину. Значение, возвращаемое хеш-функцией, называется хеш-значением, хеш-кодом или дайджестом. Хеш-значения обычно используются для индексации таблицы фиксированного размера, называемой хеш-таблицей.
Что такое MD5?
Алгоритм дайджеста сообщения MD5 - это популярная хеш-функция, которая выдает 128-битное хеш-значение. Первоначально разработанный как криптографическая хеш-функция, теперь он обычно используется для проверки целостности данных из-за множества проблем безопасности и уязвимостей.
Модуль Python hashlib
Стандартная библиотека Python состоит из модуля, который реализует множество различных алгоритмов безопасного хеширования и дайджеста сообщений, называемых hashlib
. Он также может включать дополнительные алгоритмы, доступные в зависимости от библиотеки OpenSSL, которую Python использует на вашей платформе.
Чтобы использовать алгоритмы хеширования, импортируйте модуль hashlib
.
import hashlib
Теперь мы можем использовать алгоритмы хеширования, поддерживаемые этим модулем. Чтобы проверить доступные хеш-алгоритмы в работающем интерпретаторе Python, используйте постоянный атрибут algorithmms_available
.
import hashlib
print(hashlib.algorithms_available)
Выход:
{'md5', 'blake2s', 'sha256', 'sha384', 'sha3_512', 'blake2b', 'md4', 'md5-sha1', 'sha512_224', 'sha224', 'sha3_224', 'ripemd160', 'sha3_256', 'shake_256', 'sm3', 'shake_128', 'sha3_384', 'sha1', 'sha512_256', 'whirlpool', 'sha512'}
В списке выше представлены доступные алгоритмы в hashlib
, включая доступные алгоритмы OpenSSL.
Чтобы проверить, какие алгоритмы хеширования гарантированно поддерживаются этим модулем на всех платформах, используйте постоянный атрибут algorithmms_guaranteed
.
import hashlib
print(hashlib.algorithms_guaranteed)
Выход:
{'sha3_256', 'sha256', 'sha3_224', 'sha224', 'blake2s', 'sha3_512', 'shake_128', 'sha512', 'sha3_384', 'shake_256', 'md5', 'blake2b', 'sha384', 'sha1'}
Примечание: md5
находится в списке алгоритмов_гарантия
, но некоторые совместимые с FIPS
поставщики апстрима предлагают сборку Python, исключающую его.
Используйте алгоритм MD5 в Python
Чтобы использовать алгоритм md5, мы воспользуемся конструктором md5()
и загрузим хэш-объект байтовыми объектами с помощью метода update()
или передадим данные в качестве параметра конструктора.
Для получения хеш-значения используйте метод digest()
, который возвращает байтовый
дайджест данных, переданных в хеш-объект.
import hashlib
md5_hash = hashlib.md5()
md5_hash.update(b'Hello World')
print(md5_hash.digest())
Выход:
b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'
Вы также можете передать данные в качестве параметра конструктору и получить хеш-значение.
import hashlib
print(hashlib.md5(b'Hello World').digest())
Выход:
b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'
Подобно методу digest()
, вы также можете использовать hexdigest()
, который возвращает строковый объект дайджеста, содержащий только шестнадцатеричные цифры.
import hashlib
md5_hash = hashlib.md5()
md5_hash.update(b'Hello World')
print(md5_hash.hexdigest())
Выход:
b10a8db164e0754105b7a99be72e3fe5
Обратите внимание, что перед строковым литералом, переданным в метод update()
, стоит буква b
. Используется для создания экземпляра типа bytes
вместо типа str
. Поскольку функция хеширования принимает в качестве параметра только последовательность байтов. Передача строковых объектов в метод update()
не поддерживается.
Вы также можете выполнить несколько вызовов метода update()
, что эквивалентно одному вызову со всеми объединенными аргументами.
import hashlib
first_hash = hashlib.md5()
first_hash.update(b'Hello World, Hello Python')
print(first_hash.hexdigest())
second_hash = hashlib.md5()
second_hash.update(b'Hello World,')
second_hash.update(b' Hello Python')
print(second_hash.hexdigest())
Выход:
b0f2921c8c0e63898b0388777908893a
b0f2921c8c0e63898b0388777908893a
Таким образом, мы можем использовать алгоритм хеширования md5
через модуль hashlib
, в который можно загружать данные, передавая их в качестве параметра конструктора md5()
или используя метод update()
. Мы можем получить хеш-значение с помощью метода digest()
, который возвращает объект bytes
метода digest()
или hexdigest()
, который возвращает строковый объект дайджеста, содержащий только шестнадцатеричные цифры.