Storing passwords safely · Almacenar contraseñas de forma segura
The big rule: never store plain passwords
- If a website stores your password as plain text and gets hacked, every password is stolen instantly.
- Instead, sites store a hash — a scrambled fingerprint that cannot be reversed back into the password.
La gran regla: nunca almacenes contraseñas en texto plano
- Si una página web guarda tu contraseña como texto sin cifrar y sufre una brecha de seguridad, todas las contraseñas se roban instantáneamente.
- En cambio, los sitios web almacenan un hash —una huella digital desordenada que no puede revertirse para obtener la contraseña original—.
What is a hash?
- A hash function turns any input into a fixed-length string. The same input always gives the same hash.
- It is one-way: easy to compute forwards, practically impossible to reverse.
- When you log in, the site hashes what you typed and compares it to the stored hash — it only ever stores the hash, never your actual password.
¿Qué es un hash?
- Una función hash convierte cualquier entrada en una cadena de longitud fija. La misma entrada siempre produce el mismo hash.
- Es de una sola vía: fácil de calcular hacia adelante, pero prácticamente imposible de invertir.
- Cuando inicias sesión, la página web hashea lo que escribiste y lo compara con el hash almacenado; solo guarda el hash, nunca tu contraseña real.
import hashlib
print(hashlib.sha256(b"hello").hexdigest())
Add salt
- If two users pick the same password, their hashes match — a clue for attackers.
- A salt is a random string added before hashing, so identical passwords get different hashes.
- It also defeats pre-computed "rainbow table" attacks. Always salt.
Añadir sal
- Si dos usuarios eligen la misma contraseña, sus hashes coinciden, lo cual es una pista para los atacantes.
- Un sal es una cadena aleatoria que se añade antes del hash, por lo que las contraseñas idénticas generan hashes diferentes.
- También previene ataques de "tablas arcoíris" precalculadas. Siempre utiliza sal.
Your turn
- Hash
salt + passwordwith SHA-256. The check confirms you produced the correct 64-character digest.
Covers: A-Level 6.1, 17.1 (encryption/hashing).
Tu turno
- Hashea
salt + passwordcon SHA-256. La verificación confirma que has generado el digest correcto de 64 caracteres.
Cubre: A-Level 6.1, 17.1 (encriptación/hash).
Common mistakes
- Never store passwords in plain text.
- Store a salted hash, not the password itself.
Errores comunes
- Nunca almacenes contraseñas en texto plano.
- Almacena un hash con sal, no la contraseña en sí misma.
Store the hash, not the password · Almacena el hash, no la contraseña
Sites store a hash; a tiny change gives a totally different digest. · Los sitios almacenan un hash; un cambio mínimo produce un digest totalmente diferente.
Never store a plain password — store its hash. Using hashlib, hash the salt + password with SHA-256 and put the hex digest in a variable called digest. · Nunca almacenes una contraseña en texto plano — almacena su hash. Usando hashlib, calcula el hash de salt + password con SHA-256 y guarda el digest hexadecimal en una variable llamada digest.
Click Run to see the output here. · Haz clic en Ejecutar para ver la salida aquí.
Now be the login system. The database holds a salt and a stored digest — never the password. Hash salt + attempt with SHA-256 and print welcome if it matches stored, else denied. · Ahora actúa como el sistema de inicio de sesión. La base de datos contiene un salt y un stored digest — nunca la contraseña. Calcula el hash de salt + attempt con SHA-256 e imprime welcome si coincide con stored, de lo contrario imprime denied.
Click Run to see the output here. · Haz clic en Ejecutar para ver la salida aquí.