Hash MD5 em Python

TJ Lerias 30 janeiro 2023
  1. O que é Hash?
  2. O que é MD5?
  3. Módulo Python hashlib
  4. Use o algoritmo MD5 em Python
Hash MD5 em Python

Este artigo demonstrará como usar o hash MD5 usando o módulo Python hashlib.

O que é Hash?

Um hash é uma função que pega dados de comprimento variável e os converte em um comprimento fixo. O valor retornado de uma função hash é chamado de valor hash, código hash ou resumo. Os valores de hash são geralmente usados ​​para indexar uma tabela de tamanho fixo chamada de tabela de hash.

O que é MD5?

O algoritmo de resumo da mensagem MD5 é uma função hash popular que produz um valor hash de 128 bits. Inicialmente projetado como uma função hash criptográfica, agora é comumente usado para verificar a integridade dos dados devido a vários problemas de segurança e vulnerabilidades.

Módulo Python hashlib

A biblioteca padrão do Python consiste em um módulo que implementa muitos algoritmos de hash seguro e de resumo de mensagem chamados hashlib. Também pode incluir algoritmos adicionais disponíveis, dependendo da biblioteca OpenSSL que o Python usa em sua plataforma.

Para usar os algoritmos de hash, importe o módulo hashlib.

import hashlib

Agora podemos usar os algoritmos de hash suportados por este módulo. Para verificar os algoritmos de hash disponíveis no interpretador Python em execução, use o atributo constante algorithms_available.

import hashlib

print(hashlib.algorithms_available)

Resultado:

{'md5', 'blake2s', 'sha256', 'sha384', 'sha3_512', 'blake2b', 'md4', 'md5-sha1', 'sha512_224', 'sha224', 'sha3_224', 'ripemd160', 'sha3_256', 'shake_256', 'sm3', 'shake_128', 'sha3_384', 'sha1', 'sha512_256', 'whirlpool', 'sha512'}

A lista acima são os algoritmos disponíveis em hashlib, incluindo algoritmos disponíveis de OpenSSL

Para verificar os algoritmos hash com garantia de suporte em todas as plataformas por este módulo, use o atributo constante algorithms_guaranteed.

import hashlib

print(hashlib.algorithms_guaranteed)

Resultado:

{'sha3_256', 'sha256', 'sha3_224', 'sha224', 'blake2s', 'sha3_512', 'shake_128', 'sha512', 'sha3_384', 'shake_256', 'md5', 'blake2b', 'sha384', 'sha1'}

Nota: md5 está na lista de algorithms_guaranteed, mas alguns fornecedores upstream compatíveis com FIPS oferecem uma compilação Python que o exclui.

Use o algoritmo MD5 em Python

Para usar o algoritmo md5, usaremos o construtor md5() e alimentaremos o objeto hash com objetos semelhantes a bytes usando o método update() ou passaremos os dados como um parâmetro do construtor.

Para obter o valor hash, use o método digest(), que retorna um resumo do objeto bytes dos dados alimentados para o objeto hash.

import hashlib

md5_hash = hashlib.md5()
md5_hash.update(b"Hello World")

print(md5_hash.digest())

Resultado:

b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'

Você também pode passar os dados como um parâmetro para o construtor e obter o valor de hash

import hashlib

print(hashlib.md5(b"Hello World").digest())

Resultado:

b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'

Semelhante ao método digest(), você também pode usar hexdigest(), que retorna um objeto string do resumo contendo apenas dígitos hexadecimais.

import hashlib

md5_hash = hashlib.md5()
md5_hash.update(b"Hello World")

print(md5_hash.hexdigest())

Resultado:

b10a8db164e0754105b7a99be72e3fe5

Observe que há um b antes do literal de string ser passado para o método update(). É usado para criar uma instância do tipo bytes em vez do tipo str. Como a função de hash só aceita uma sequência de bytes como parâmetro. A passagem de objetos string para o método update() não é suportada.

Você também pode fazer várias chamadas para o método update(), que é equivalente a uma única chamada com todos os argumentos sendo concatenados.

import hashlib

first_hash = hashlib.md5()
first_hash.update(b"Hello World, Hello Python")
print(first_hash.hexdigest())

second_hash = hashlib.md5()
second_hash.update(b"Hello World,")
second_hash.update(b" Hello Python")
print(second_hash.hexdigest())

Resultado:

b0f2921c8c0e63898b0388777908893a
b0f2921c8c0e63898b0388777908893a

Em resumo, podemos usar o algoritmo de hash md5 através do módulo hashlib que pode ser alimentado com dados passando-o como um parâmetro do construtor md5() ou usando o método update(). Podemos obter o valor hash usando o método digest(), que retorna um objeto bytes do método digest() ou hexdigest(), que retorna um objeto string do digest contendo apenas dígitos hexadecimais.