Saltar al contenido
Underc0de /foro

¿Cómo guardarías las contraseñas de los usuarios en la base de datos? ¿Por qué no alcanza con un SHA-256?

$ interview --rol dev

Evalúa si el candidato conoce el almacenamiento seguro de contraseñas: hashing lento con sal, algoritmos recomendados y por qué los hashes rápidos son inadecuados.

Respuesta

Las contraseñas nunca se guardan en texto plano ni con cifrado reversible. Se guarda un hash lento con sal.

¿Por qué no SHA-256 o MD5? Son funciones diseñadas para ser rápidas. Una GPU calcula miles de millones de hashes por segundo, así que si se filtra la base, las contraseñas débiles caen por fuerza bruta o diccionario en poco tiempo.

Qué uso:
  • Argon2id (primera opción), o bcrypt / scrypt. PBKDF2 si hay requisitos de cumplimiento como FIPS.
  • Sal única y aleatoria por usuario. Evita las tablas precalculadas y que dos usuarios con la misma clave tengan el mismo hash. Las librerías la generan y la incluyen dentro del string del hash.
  • Factor de costo ajustado para que cada hash tarde del orden de cientos de milisegundos en el servidor.
  • Rehash al hacer login cuando suben los parámetros de costo.
  • Opcional: un pepper guardado en un gestor de secretos, fuera de la base.

Código: python
from argon2 import PasswordHasher
from argon2.exceptions import VerifyMismatchError

ph = PasswordHasher()
hash_guardado = ph.hash(password)

try:
    ph.verify(hash_guardado, intento)
    if ph.check_needs_rehash(hash_guardado):
        hash_guardado = ph.hash(intento)  # actualizar en la BD
except VerifyMismatchError:
    pass  # credenciales inválidas

La verificación la hace la librería, nunca un == propio. Además conviene sumar rate limiting en el login y no indicar si lo que falló fue el usuario o la contraseña.

Errores comunes

Decir "lo encripto con AES" o "uso SHA-256 con sal" creyendo que eso basta. Implementar el hashing a mano en vez de usar una librería probada, o usar una sal fija global.

Redactado con el asistente Underc0de IA. Actualizado el 12/11/2026. ¿Ves un error? Contanos en el foro.

Grupo de WhatsApp