Neste artigo, você aprenderá a localizar o hash de um arquivo e exibi-lo.
Para entender este exemplo, você deve ter conhecimento dos seguintes tópicos de programação Python:
- Funções Python
- Funções Python definidas pelo usuário
- E / S de arquivo Python
As funções de hash pegam uma quantidade arbitrária de dados e retornam uma string de bits de comprimento fixo. A saída da função é chamada de mensagem de resumo.
Eles são amplamente usados em criptografia para fins de autenticação. Existem muitas funções de hash como MD5, SHA-1 etc. Consulte esta página para saber mais sobre funções de hash em criptografia.
Neste exemplo, ilustraremos como hash um arquivo. Usaremos o algoritmo de hash SHA-1. O resumo do SHA-1 tem 160 bits.
Não alimentamos os dados do arquivo de uma só vez, porque alguns arquivos são muito grandes para caber na memória de uma vez. Dividir o arquivo em pequenos pedaços tornará a memória do processo eficiente.
Código-fonte para encontrar o 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)
Resultado
633d7356947eec543c50b76a1852f92427f4dca9
Neste programa, abrimos o arquivo em modo binário. As funções de hash estão disponíveis no hashlib
módulo. Fazemos um loop até o final do arquivo usando um while
loop. Ao chegar ao fim, obtemos o objeto bytes vazios.
Em cada iteração, lemos apenas 1024 bytes (este valor pode ser alterado de acordo com nossa vontade) do arquivo e atualizamos a função de hash.
Finalmente, retornamos a mensagem de resumo em representação hexadecimal usando o hexdigest()
método.