Хеш - это функция, которая изменяет группу/последовательность байтов различной длины в группу/последовательность фиксированной длины. Хэш-функция выдает результат, называемый хэшем, дайджестом сообщения, контрольной суммой или хэш-значением. Это закодированное сообщение или хэш-значение может быть использовано для определения того, были ли изменены данные. Одним из примеров хэш-функции является MD5.
Что такое хэш MD5 в Python?
В модуле "hashlib" языка Python имеется криптографическая хэш-функция, называемая хэшем "MD5". Она принимает строку данных и выдает 128-битное шестнадцатеричное число. Хэш можно использовать для построения кэша больших массивов данных, проверки паролей, отпечатков пальцев, целостности файлов и т.д. Перед хешированием необходимо выбрать соответствующую кодировку символов для преобразования текстовых данных в двоичные. Это связано с тем, что алгоритмы хеширования оперируют двоичными данными.
Хеш MD5 имеет три соответствующие функции:
- encode(): Эта функция преобразует строку в байты для использования хэш-функцией.
- digest(): Получает зашифрованные данные в байтах.
- hexdigest(): Эта функция возвращает зашифрованные данные в шестнадцатеричном формате.
Пример 1: Вычисление MD5-хэша строковых объектов
Следующий код используется для определения MD5-хэша указанных строковых объектов:
1 2 3 4 | import hashlib str1=b'Welcome to Python Guide!' res = hashlib.md5(str1) print(res.digest()) |
В приведенном выше коде:
- Импортируется модуль "hashlib", инициализируется указанный литерал байтовой строки.
- После этого функция "hashlib.md5()" модуля "hashlib" используется для создания хэш-объекта. Здесь функция md5() реализует хэш-алгоритм MD5.
- Наконец, метод "digest()" возвращает хэш-значение в виде байтовой строки.
На входном строковом объекте реализован хэш-алгоритм MD5.
Мы также можем вывести значение строки в шестнадцатеричном эквиваленте MD5 Hash с помощью функции "hexdigest()":
1 2 3 4 | import hashlib str1=b'Welcome to Python Guide!' res = hashlib.md5(str1) print(res.hexdigest()) |
Пример 2: Вычисление MD5-хэшей файлов
Мы также можем определить MD5-хэши файлов с помощью модуля "hashlib". Чтобы получить значение хэша для больших файлов, необходимо обрабатывать его по частям для экономии памяти.
Для этого воспользуемся приведенным ниже примером кода:
1 2 3 | import hashlib res = hashlib.md5('newfile.txt'.encode('UTF-8')) print(res.hexdigest()) |
В данном коде для создания хэш-объекта используется функция "hashlib.md5()" из модуля "hashlib". Затем метод "encode()" используется для кодирования файлового объекта в байтовую строку. Наконец, метод "hexdigest()" используется для получения результата хэша в шестнадцатеричном представлении.
Хеш-значение файла MD5 представлено в шестнадцатеричном виде.
Мы также можем хэшировать большие файлы, превышающие "10 ГБ", например видеоигры или файлы журналов. Чтобы создать хэш MD5 без использования всей памяти, необходимо разбить файл на более мелкие фрагменты байтов. Размер фрагментов зависит от размера файла и памяти компьютера. Мы обрабатываем каждый кусок по очереди и обновляем хэш по мере выполнения. Если в файле 100 фрагментов, то хэш MD5 будет обновлен 100 раз:
1 2 3 4 5 6 | import hashlib md5 = hashlib.md5() with open(r"Video.mp4", "rb") as f: while chunk := f.read(4096): md5.update(chunk) print(md5.hexdigest()) |
В приведенном выше коде сначала создается хэш-объект с помощью функции "hashlib.md5()". Затем код открывает файл в режиме чтения двоичных файлов и считывает его содержимое по фрагментам. Затем каждый фрагмент передается в метод update() хэш-объекта для обновления значения хэша.
После того как весь файл прочитан, вызывается метод "hexdigest()" объекта hash для получения хэш-значения в шестнадцатеричном формате.
Заключение
В языке Python функция "hashlib.md5()" модуля "hashlib" используется для создания криптографического хэша по строке данных или файлов. Она может выдавать 128-разрядное шестнадцатеричное число. Эта функция используется вместе с функциями "encode()", "digest()" и "hexdigest()" для вычисления MD5-хэша строк или файлов. В этом блоге на многочисленных примерах рассмотрен подробный учебник по "hashlib" md5 в Python.