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 hashlibpickle / 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 hashlibVerificació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 hashDeterminismo (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 / Algoritmo
Longitud en bits
Uso
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 stretching — bcrypt / 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?