MD5 Hash en Python

TJ Lerias 30 enero 2023
  1. ¿Qué es hachís?
  2. ¿Qué es MD5?
  3. Módulo Python hashlib
  4. Utilice el algoritmo MD5 en Python
MD5 Hash en Python

Este artículo demostrará cómo usar el hash MD5 usando el módulo Python hashlib.

¿Qué es hachís?

Un hash es una función que toma datos de longitud variable y los convierte a una longitud fija. El valor devuelto por una función hash se denomina valor hash, código hash o resumen. Los valores hash se utilizan generalmente para indexar una tabla de tamaño fijo llamada tabla hash.

¿Qué es MD5?

El algoritmo de resumen de mensajes MD5 es una función hash popular que produce un valor hash de 128 bits. Inicialmente diseñado como una función hash criptográfica, ahora se usa comúnmente para verificar la integridad de los datos debido a múltiples problemas de seguridad y vulnerabilidades.

Módulo Python hashlib

La biblioteca estándar de Python consiste en un módulo que implementa diferentes algoritmos de resumen de mensajes y hash seguros llamados hashlib. También puede incluir algoritmos adicionales disponibles según la biblioteca OpenSSL que Python usa en su plataforma.

Para utilizar los algoritmos hash, importe el módulo hashlib.

import hashlib

Ahora podemos usar los algoritmos de hash compatibles con este módulo. Para comprobar los algoritmos hash disponibles en el intérprete de Python en ejecución, utilice el atributo constante algorithms_available.

import hashlib

print(hashlib.algorithms_available)

Producción :

{'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'}

La lista anterior son los algoritmos disponibles en hashlib, incluidos los algoritmos disponibles de OpenSSL

Para comprobar los algoritmos hash que este módulo garantiza que serán compatibles con todas las plataformas, utilice el atributo constante algorithms_guaranteed.

import hashlib

print(hashlib.algorithms_guaranteed)

Producción :

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

Nota: md5 está en la lista de algorithms_guaranteed, pero algunos proveedores ascendentes compatibles con FIPS ofrecen una compilación de Python que lo excluye.

Utilice el algoritmo MD5 en Python

Para usar el algoritmo md5, usaremos el constructor md5() y alimentaremos el objeto hash con objetos tipo byte usando el método update() o pasaremos los datos como un parámetro del constructor.

Para obtener el valor hash, utilice el método digest(), que devuelve un resumen del objeto bytes de los datos alimentados al objeto hash.

import hashlib

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

print(md5_hash.digest())

Producción :

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

También puede pasar los datos como parámetro al constructor y obtener el valor hash

import hashlib

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

Producción :

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

Similar al método digest(), también puede usar hexdigest(), que devuelve un objeto de cadena del resumen que contiene sólo dígitos hexadecimales.

import hashlib

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

print(md5_hash.hexdigest())

Producción :

b10a8db164e0754105b7a99be72e3fe5

Observe que hay una b antes de la cadena literal pasada al método update(). Se utiliza para crear una instancia de tipo bytes en lugar de tipo str. Como la función hash solo acepta una secuencia de bytes como parámetro. No se admite el paso de objetos de cadena al método update().

También puede hacer múltiples llamadas al método update(), que es equivalente a una sola llamada con todos los argumentos 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())

Producción :

b0f2921c8c0e63898b0388777908893a
b0f2921c8c0e63898b0388777908893a

En resumen, podemos usar el algoritmo hash md5 a través del módulo hashlib que puede ser alimentado con datos pasándolo como parámetro del constructor md5() o usando el método update(). Podemos obtener el valor hash usando el método digest(), que devuelve un objeto bytes del método digest() o hexdigest(), que devuelve un objeto de cadena del resumen que contiene sólo dígitos hexadecimales.