Módulo hashlib de Python
Python hashlibEl módulo se utiliza principalmente para realizar operaciones hash.
Hash es un algoritmo que mapea datos de entrada de cualquier longitud a datos de salida de longitud fija.
El hash se usa comúnmente en escenarios como verificar la integridad de los datos y almacenar contraseñas de forma segura.
La salida de una función hash suele ser una cadena de letras y números aparentemente aleatoria.
El módulo hashlib proporciona implementaciones de algoritmos hash comunes, como MD5, SHA-1, SHA-256, etc.
Para usarhashlibla función primero debe importarse:
import hashlib
Ver el contenido del módulo hashlib:
Ejemplo
>>> dir(hashlib)
['__all__', '__block_openssl_constructor', '__builtin_constructor_cache', '__builtins__', '__cached__', '__doc__', '__file__', '__get_builtin_constructor', '__loader__', '__name__', '__package__', '__spec__', '_hashlib', 'algorithms_available', 'algorithms_guaranteed', 'blake2b', 'blake2s', 'md5', 'new', 'pbkdf2_hmac', 'scrypt', 'sha1', 'sha224', 'sha256', 'sha384', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'sha512', 'shake_128', 'shake_256']
A continuación se presentan algunos métodos comunes del módulo hashlib y una introducción a los algoritmos hash:
Métodos comunes
hashlib.new(name, data=None): Crea un objeto hash.
El parámetro name es el nombre del algoritmo hash, y el parámetro data son los datos que se van a hash.
Ejemplo
import hashlib
sha256_hash = hashlib.new('sha256')
sha256_hash.update(b'EJEMPLO')
print(sha256_hash.hexdigest())
El resultado es:
673dc967d03201db7fe47b7eabd56c47ca5bc694222de303106a5504e5d0daa8
hashlib.md5() / hashlib.sha1() / hashlib.sha256() / ...: Crea directamente un objeto hash usando un algoritmo hash específico.
Ejemplo
md5_hash = hashlib.md5(b'EJEMPLO')
print(md5_hash.hexdigest())
El resultado es:
18fa661e2a4a7dd6471cc1407290cf6e
Métodos del objeto hash
update(data): Actualiza el contenido del mensaje del objeto hash.
Ejemplo
sha256_hash = hashlib.sha256()
sha256_hash.update(b'Hello, ')
sha256_hash.update(b'Ejemplo!')
print(sha256_hash.hexdigest())
El resultado es:
1b56561022276e9a5a8e1cda72e1b39fca6f6074326a74d39f6dfd9540c8ecd7
hexdigest(): Obtiene el valor hash en representación hexadecimal.
Ejemplo
md5_hash = hashlib.md5(b'EJEMPLO')
print(md5_hash.hexdigest())
El resultado es:
18fa661e2a4a7dd6471cc1407290cf6e
digest(): Obtiene el valor hash en representación binaria.
Ejemplo
sha1_hash = hashlib.sha1(b'EJEMPLO')
print(sha1_hash.digest())
El resultado es:
b'4\x17\t\xd0\xdb\xc2f3/\x1c\xbc\xd8\xc2_\xd4\xa0T\x12\xb7\xd4'
Algoritmos hash comunes
MD5
Ejemplo
md5_hash = hashlib.md5(b'EJEMPLO')
print(md5_hash.hexdigest())
El resultado es:
18fa661e2a4a7dd6471cc1407290cf6e
SHA-1
Ejemplo
sha1_hash = hashlib.sha1(b'EJEMPLO')
print(sha1_hash.hexdigest())
El resultado es:
341709d0dbc266332f1cbcd8c25fd4a05412b7d4
SHA-256
Ejemplo
sha256_hash = hashlib.sha256(b'EJEMPLO')
print(sha256_hash.hexdigest())
El resultado es:
673dc967d03201db7fe47b7eabd56c47ca5bc694222de303106a5504e5d0daa8
SHA-512
Ejemplo
sha512_hash = hashlib.sha512(b'EJEMPLO')
print(sha512_hash.hexdigest())
El resultado es:
7cfe50493eebd48ee7330c797459c2d0d5ca943bd1c84ad7a0b6783b11cd49d06b4a1dc84ee9ea5e20d0bfedbdb67e716500a20e5870abecea3f32dc8484a811
En aplicaciones prácticas, elegir el algoritmo hash adecuado depende de las necesidades específicas. Cabe señalar que MD5 y SHA-1 ya se consideran inseguros, especialmente en el campo de la seguridad; se recomienda usar algoritmos más robustos como SHA-256 o SHA-512.
Algoritmos hash comunes en el módulo hashlib de Python y sus significados:
| Nombre del algoritmo | Longitud del resumen (bits) | Longitud de salida (bytes) | Seguridad | Uso |
|---|---|---|---|---|
| md5 | 128 | 16 | Inseguro | Verificación de integridad de datos, almacenamiento de contraseñas, etc. |
| sha1 | 160 | 20 | Inseguro | Verificación de integridad de datos, almacenamiento de contraseñas, etc. |
| sha224 | 224 | 28 | bajo | Verificación de integridad de datos, firmas digitales, etc. |
| sha256 | 256 | 32 | Medio | Verificación de integridad de datos, firmas digitales, etc. |
| sha384 | 384 | 48 | Alto | Firmas digitales, algoritmos de cifrado, etc. |
| sha512 | 512 | 64 | Alto | Firmas digitales, algoritmos de cifrado, etc. |
| sha3_224 | 224 | 28 | Alto | Miembro de la familia SHA-3, estándar futuro, adecuado para firmas digitales, etc. |
| sha3_256 | 256 | 32 | Alto | Miembro de la familia SHA-3, estándar futuro, adecuado para firmas digitales, etc. |
| sha3_384 | 384 | 48 | Alto | Miembro de la familia SHA-3, estándar futuro, adecuado para firmas digitales, etc. |
| sha3_512 | 512 | 64 | Alto | Miembro de la familia SHA-3, estándar futuro, adecuado para firmas digitales, etc. |
| shake_128 | Variable | Variable | Alto | La serie SHAKE es la versión de longitud variable de la familia SHA-3, adecuada para diversas aplicaciones. |
| shake_256 | Variable | Variable | Alto | La serie SHAKE es la versión de longitud variable de la familia SHA-3, adecuada para diversas aplicaciones. |
Nota:
- Longitud del resumen (bits):Indica la longitud del resumen que produce el algoritmo hash, en bits.
- Longitud de salida (bytes):Indica la longitud del resumen que produce el algoritmo hash, en bytes.
- Seguridad:Indica el nivel de seguridad del algoritmo hash, incluyendo "inseguro", "bajo", "medio" y "alto". Esta es una clasificación general; la seguridad específica también debe considerar el uso del algoritmo y los escenarios de ataque concretos.