Aprende leyendo en orden

hashlib — Calcular valores hash de los datos

El hash hex de 64 caracteres de hashlib.sha256, sus 3 propiedades (determinismo, avalancha, unidireccionalidad), detección de alteraciones y por qué usar bcrypt / argon2 para contraseñas.

hashlib es un módulo de la biblioteca estándar que calcula un valor hash de longitud fija a partir de cualquier secuencia de bytes. El algoritmo destacado SHA-256 devuelve una cadena hex de 256 bits = 64 caracteres, y se usa ampliamente donde quieras confirmar "¿es el mismo contenido?" — comprobaciones de integridad de archivos, firmado de API, IDs de commit de Git y similares.

A diferencia de pickle y base64, hashlib es una conversión unidireccional — no puedes recuperar la entrada desde la salida. Ten en cuenta que no es para "guardar y restaurar" sino para "solo dime si dos entradas son iguales o diferentes".

pickle / base64 vs hashlib
pickle / base64conversión bidireccionalobjeto ⇄ bytesbytes ⇄ ASCIIguardar y restaurarhashlibconversión unidireccionalbytes → hashno se puede revertirjuzgar igual vs diferenteusouso
pickle / base64 son conversiones reversibles, bidireccionales usadas para "guardar y restaurar" y "conversión de transporte". hashlib es una conversión no reversible, unidireccional para situaciones donde solo necesitas juzgar si dos entradas son iguales o diferentes. Los casos de uso son fundamentalmente diferentes — no los confundas.

SHA-256 — Un hash hex de 64 caracteres con tres propiedades

Cuatro usos típicos de hashlib
integridad de archivocomparar sha256sumID de commit Githash del árbol completogen. de clave de cachéhash de entrada como clavefirmado API (HMAC)evitar manipulación de petición
Verificación de integridad de descargas / IDs de commit de Git / generación de claves de caché / firmado de peticiones API (HMAC). Lo común es juzgar "¿es el mismo contenido?" mediante un hash de longitud fija — no es reversible, así que no puede reemplazar el almacenamiento.
Las tres propiedades de las funciones hash
entrada ASHA-256hash X(64 chars hex)entrada A (otra vez)SHA-256hash X(siempre idéntico)entrada A' (1 char distinto)SHA-256hash Y(totalmente distinto)
Determinismo (misma entrada → misma salida), efecto avalancha (un bit diferente → salida totalmente distinta) y unidireccionalidad (no se puede recuperar la entrada desde la salida). SHA-256 siempre produce una cadena hex de 64 caracteres, usada para detección de alteración y comprobaciones de integridad.
Método / AlgoritmoLongitud en bitsUso
hashlib.sha256(b)256 bit (64 caracteres hex)integridad de archivos / firmado de API (recomendado)
hashlib.sha512(b)512 bit (128 caracteres hex)cuando quieras un hash más largo
hashlib.md5(b)128 bit (32 caracteres hex)existen ataques de colisión — no usar en código nuevo
.hexdigest()obtener el hash como cadena hex
.digest()obtener el hash como bytes en crudo

No uses hashlib solo para almacenar contraseñas

Si guardas contraseñas de usuarios simplemente hasheándolas con sha256 o similar, se vuelven vulnerables a ataques de búsqueda precalculada (rainbow tables). Puedes defenderte de esto con bibliotecas dedicadas que incorporan salt + key stretchingbcrypt / argon2 / passlib. hashlib encaja en escenarios de "¿es la misma entrada?" como comprobaciones de integridad de archivos y firmado de API.

Calcula el SHA-256 de "Hello, Python!" y confirma que la salida es siempre una cadena hex de 64 caracteres.

① Importa hashlib y convierte la cadena "Hello, Python!" a bytes con UTF-8.

② Obtén el SHA-256 de esos bytes como cadena hex con hashlib.sha256(...).hexdigest().

③ Imprime la longitud del hash como Longitud SHA-256: ◯ (debería ser 64).

Editor Python

Ejecutar el código para ver el resultado

Verificar el determinismo y el efecto avalancha

Entre las características de las funciones hash, "misma entrada → misma salida" (determinismo) y "un carácter diferente → salida totalmente distinta" (efecto avalancha) se pueden confirmar comparando dos entradas ligeramente diferentes. Estas dos propiedades son precisamente lo que hace útiles a los hashes para comprobaciones de integridad de archivos y detección de alteración.

Compara el hash de la Práctica 1 con un valor recalculado y con un valor con el último carácter cambiado.

① Repite los pasos de la Práctica 1 para meter el SHA-256 de "Hello, Python!" en sha.

② Hashea la misma entrada otra vez y comprueba si es igual a sha — imprime como Igual al recalcular: True / False.

③ Calcula el hash de los bytes con ! cambiado por . al final y confirma que difiere de sha — imprime como Distinto tras un carácter: True / False.

Editor Python

Ejecutar el código para ver el resultado
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Cuál es la longitud de la cadena devuelta por hexdigest() de SHA-256?

Pregunta 2¿Qué pasa con el SHA-256 de la misma entrada?

Pregunta 3¿Puedes recuperar la entrada original desde un hash?

Pregunta 4¿Cuál es la mejor opción para almacenar contraseñas de usuarios?