Python-program til at finde hash af fil

I denne artikel lærer du at finde hash af en fil og vise den.

For at forstå dette eksempel skal du have kendskab til følgende Python-programmeringsemner:

  • Python-funktioner
  • Python brugerdefinerede funktioner
  • Python File I / O

Hash-funktioner tager en vilkårlig mængde data og returnerer en bitstreng med fast længde. Funktionens output kaldes fordøjelsesmeddelelsen.

De bruges i vid udstrækning i kryptografi til autentificeringsformål. Der er mange hashing-funktioner som MD5, SHA-1 osv. Se denne side for at vide mere om hash-funktioner i kryptografi.

I dette eksempel illustrerer vi, hvordan man hash en fil. Vi bruger SHA-1 hashing-algoritmen. Fordøjelsen af ​​SHA-1 er 160 bits lang.

Vi føder ikke dataene fra filen på én gang, fordi nogle filer er meget store til at passe i hukommelsen på én gang. Opdeling af filen i små stykker gør proceshukommelsen effektiv.

Kildekode for at finde Hash

 # 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) 

Produktion

 633d7356947eec543c50b76a1852f92427f4dca9 

I dette program åbner vi filen i binær tilstand. Hash-funktioner er tilgængelige i hashlibmodulet. Vi sløjfer til slutningen af ​​filen ved hjælp af en whilesløjfe. Når vi når slutningen, får vi tomme byteobjekter.

I hver iteration læser vi kun 1024 bytes (denne værdi kan ændres efter vores ønske) fra filen og opdaterer hashing-funktionen.

Endelig returnerer vi fordøjelsesmeddelelsen i hexadecimal repræsentation ved hjælp af hexdigest()metoden.

Interessante artikler...