Програма Python за намиране на хеш на файл

В тази статия ще се научите да намирате хеш на файл и да го показвате.

За да разберете този пример, трябва да имате познанията по следните теми за програмиране на Python:

  • Функции на Python
  • Функции, дефинирани от потребителя на Python
  • Входно / изходни файлове на Python

Хеш функциите вземат произволно количество данни и връщат битов низ с фиксирана дължина. Изходът на функцията се нарича дайджест съобщение.

Те се използват широко в криптографията с цел удостоверяване. Има много хеширащи функции като MD5, SHA-1 и др. Вижте тази страница, за да научите повече за хеш функциите в криптографията.

В този пример ще илюстрираме как да хешираме файл. Ще използваме алгоритъма за хеширане SHA-1. Дайджестът на SHA-1 е дълъг 160 бита.

Ние не подаваме данните от файла наведнъж, защото някои файлове са много големи, за да се поберат в паметта наведнъж. Разбиването на файла на малки парчета ще направи паметта на процеса ефективна.

Изходен код за намиране на хеш

 # Python rogram to find the SHA-1 message digest of a file # importing the hashlib module import hashlib def hash_file(filename): """"This function returns the SHA-1 hash of the file passed into it""" # make a hash object h = hashlib.sha1() # open file for reading in binary mode with open(filename,'rb') as file: # loop till the end of the file chunk = 0 while chunk != b'': # read only 1024 bytes at a time chunk = file.read(1024) h.update(chunk) # return the hex representation of digest return h.hexdigest() message = hash_file("track1.mp3") print(message) 

Изход

 633d7356947eec543c50b76a1852f92427f4dca9 

В тази програма отваряме файла в двоичен режим. Функциите на хеш се предлагат в hashlibмодула. Завъртаме до края на файла, като използваме whileцикъл. При достигане на края получаваме обект с празни байтове.

Във всяка итерация четем само 1024 байта (тази стойност може да бъде променена според нашето желание) от файла и актуализираме функцията за хеширане.

Накрая връщаме обобщеното съобщение в шестнадесетично представяне, използвайки hexdigest()метода.

Интересни статии...