¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Guardar contraseñas como hash

Después de esta lección: Puedo explicar por qué las contraseñas se guardan como hash.

Lección de 45 minSin comandos

Roban la base de datos de clientes

A una web de entradas para conciertos le roban la base de datos. Dentro hay 150.000 correos con sus contraseñas.

Mucha gente usa la misma contraseña para su correo y su banco. Si las contraseñas se pueden leer, el atacante entra en todas partes.

Un sistema bien hecho nunca guarda la contraseña. Vamos a ver qué guarda en su lugar.

Al final de esta lección

Nota

Puedo explicar por qué las contraseñas se guardan como hash.

Palabras clave

PalabraQué significaEjemplo
Texto planotexto que cualquiera puede leer tal cual
Función hashcálculo que convierte un texto en un código de longitud fijaSHA-256
Hashel código que sale, imposible de invertir
Saltexto aleatorio que se añade antes del hash
Brecha de datosdatos que acaban en manos de quien no debe

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un hash funciona en un solo sentido

Una función hash convierte cualquier texto en un código de longitud fija. Ese código es el hash.

El mismo texto da siempre el mismo hash. Si cambias una sola letra, el hash cambia por completo.

Desde el hash no se puede volver al texto. Por eso se puede guardar sin peligro.

Prueba: hacer el hash de una contraseña

Código: python
import hashlib


def make_hash(text):
    # encode() pasa el texto a bytes, que es lo que pide hashlib
    return hashlib.sha256(text.encode()).hexdigest()


print(make_hash("Valencia2026"))
print(make_hash("Valencia2026"))
print(make_hash("valencia2026"))
print(len(make_hash("a")), len(make_hash("una contraseña mucho más larga")))

# Cambia una letra de "Valencia2026" y vuelve a ejecutar.

Los nombres del código van en inglés

Consejo

Verás nombres como make_hash o password. En casi todas las empresas el código se escribe con nombres en inglés. Así lo entiende cualquier compañero. Los comentarios y los mensajes siguen en español.

Iniciar sesión es comparar dos hashes

Al darte de alta, el sistema calcula el hash de tu contraseña. Solo guarda ese hash.

Al iniciar sesión, calcula el hash de lo que escribes. Luego lo compara con el hash guardado. Si son iguales, entras.

El sistema nunca necesita conocer tu contraseña. Quien robe la base solo se lleva hashes.

La sal separa dos contraseñas iguales

Dos personas con la misma contraseña tienen el mismo hash. Un atacante lo ve enseguida. También puede buscar hashes de contraseñas comunes en listas enormes ya preparadas.

La sal lo evita. El sistema añade un texto aleatorio a cada contraseña antes de calcular el hash. La sal se guarda junto al hash. No tiene que ser secreta.

Prueba: añadir una sal

Código: python
import hashlib


def make_hash(text):
    return hashlib.sha256(text.encode()).hexdigest()


# Dos empleadas eligen la misma contraseña
print("Lucía:", make_hash("Valencia2026")[:16])
print("Marta:", make_hash("Valencia2026")[:16])

# Cada una recibe su propia sal, guardada junto al hash
print("Lucía:", make_hash("r8Tm" + "Valencia2026")[:16])
print("Marta:", make_hash("q3Zw" + "Valencia2026")[:16])

# Dale a Marta la sal "r8Tm". ¿Qué pasa con su hash?

Un error frecuente

Advertencia

Mucha gente cree que hacer un hash y cifrar son lo mismo. Un dato cifrado se descifra con una clave. Un hash no se deshace, ni siquiera con una clave. Guarda las contraseñas como hash, porque nadie, ni tú, debe poder leerlas.

En un puesto real

Consejo

SHA-256 es rápido, y eso ayuda a quien prueba miles de millones de contraseñas. Los sistemas reales usan un hash lento como bcrypt o Argon2, que ya añade la sal. La idea es la misma de esta lección.

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.