quinta-feira, 13 de agosto de 2020

Hash MD5 no Python

Imagem de TheDigitalWay por Pixabay

Os hashes criptográficos são muitos utilizados no dia-a-dia. Esse tipo de criptografia esta mais presente na sua vida do que você imagina. Por exemplo, eles são utilizados em assinaturas digitais, detecção de manipulação, códigos de autenticação de mensagens, impressões digitais, somas de verificação (verificação de integridade de mensagem ou arquivo), tabelas de hash, armazenamento de senha e muito mais. Os hashes têm mostrados a sua utilidade no envio de mensagens pela rede e para a segurança no armazenamento de senhas em servidores. Isso porque, a mensagem ou senha não fica salva diretamente no banco de dados, apenas o seu hash. Desse modo, mesmo que o banco de dados seja invadido as senhas estão salvas. Pelo menos em teoria (Nada é cem por cento seguro).
Para trabalhar com hash, python fornece várias funções no módulo hashlib. Nesse tutorial, vamos utilizar algumas dessas funções e explicar seu funcionamento do hash MD5.

MD5 Hash

A função de hash MD5 aceita sequências de bytes e retorna um valor hash de 128 bits. Esse hash é muito utilizado para verificar a integridade dos dados. Você já deve ter baixado algum arquivo, de um site, onde o hash MD5 é disponibilizado. Esse hash md5 é disponibilizado para que você possa ter certeza que o arquivo que você baixou é o mesmo que você queria. Geralmente são sites de torrents que fazem isso.
Essas são as funções que vamos utilizar para criar um hash md5:

  • encode(): Converte a string em bytes para ser aceitável pela função hash.
  • digest(): Retorna os dados codificados em formato de byte.
  • hexdigest(): Retorna os dados codificados em formato hexadecimal.

No exemplo abaixo, vamos passar um valor em bytes e vamos receber uma saída em bytes:

import hashlib 
  
# codificando a string Acervo Lima usando a função de hash md5
hash = hashlib.md5(b'Acervo Lima') 
  
# imprimir o equivalente em bytes. 
print("Equivalente em bytes ao hash: ", hash.digest())

No exemplo, chamamos a função md5() passando um valor em bytes. A função md5() faz a codificação dessa string e, depois, chamamos a função digest(). A função digest() retorna o resultado da função md5() em bytes.
Mas os hashes que vemos por ai não são disponibilizados em bytes, mas sim em hexadecimal. No exemplo abaixo, vamos retornar um hash md5 em hexadecimal.

>>> string = 'Acervo Lima'.encode()
>>> hash = hashlib.md5(string)
>>> print('O equivalente em hexadecimal ao hash: ',
... hash.hexdigest())
O equivalente em hexadecimal ao hash:  409b83920744582bf8b286e4e63e2207

Nesse exemplo, convertemos a string 'Acervo Lima' em bytes usando a função encode(). Depois, chamamos a função md5() para obter o hash md5 em bytes. E, em seguida, chamamos a função hexdigest(). A função hexdigest() converte os bytes em hexadecimal.

Referência:
Módulo hashlib

0 comentários:

Postar um comentário