Saltar al contenido
>_ITDITDPlataforma de seguridad web

Glosario

¿Qué es el hashing de contraseñas? Almacenar contraseñas con seguridad mediante una transformación de un solo sentido

El hashing de contraseñas las almacena con una transformación de un solo sentido irreversible. La diferencia con el cifrado, por qué MD5/SHA-256 a secas no basta y la respuesta correcta: una sal por usuario más un hash lento (bcrypt, Argon2, scrypt).

Publicado 2026-06-27 Actualizado 2026-06-27 4 min de lectura

«Nunca guardes una contraseña tal cual en la base de datos»; entonces, ¿cómo se guarda? La respuesta es el hashing. Aquí tienes cómo funciona y los puntos clave para hacerlo con seguridad (sin pasos de ataque).

Hashing ≠ cifrado

Se confunden, pero los objetivos son opuestos. El cifrado es «reversible con una clave, para poder volver a leerlo después». El hashing es «de un solo sentido: no se puede revertir». Una contraseña es información que ni siquiera el operador debería necesitar volver a leer, así que un hash deliberadamente irreversible es lo idóneo.

Cifrado (reversible)

texto plano texto cifrado. la clave lo revierte. para datos que vuelves a leer

Hashing (un solo sentido)

contraseña hash. no se puede revertir. para almacenar contraseñas

Almacena las contraseñas con un hash de un solo sentido. El cifrado (reversible) tiene el objetivo opuesto.

Al iniciar sesión, compruebas «aplica el hash a la contraseña introducida del mismo modo y mira si coincide con el hash almacenado.» Nunca necesitas recuperar el original.

Por qué «MD5/SHA-256 a secas» no basta

MD5 y SHA-256 son hashes rápidos. Esa es una propiedad útil en otros contextos, pero una debilidad para almacenar contraseñas: un atacante puede calcular un número enorme de conjeturas por segundo contra un hash filtrado.

  • Tablas arcoíris: una tabla precalculada gigante de «contraseña común → su hash». Con un hash a secas, basta con buscarlo para encontrar la coincidencia.
  • Fuerza bruta: cuanto más rápido el hash, más conjeturas por unidad de tiempo, es decir, más fácil de romper.

Las dos soluciones

1

Añade una sal (un valor distinto por usuario)

Antes del hashing, mezcla un valor aleatorio que difiera por usuario (una sal). Ahora la misma contraseña se almacena de forma distinta para cada uno, lo que derrota las tablas arcoíris e impide que una sola ejecución de cracking cubra contraseñas reutilizadas entre cuentas.

2

Usa un hash deliberadamente lento y diseñado a propósito

bcrypt / Argon2 / scrypt te permiten hacer el cálculo intencionadamente costoso (un parámetro de coste). Una lentitud que nadie nota en un único inicio de sesión legítimo reduce la fuerza bruta del atacante a un ritmo impracticable. El salteo también viene integrado en ellos.

La visión de este sitio: no lo construyas tú mismo

«Seguro que MD5 más una sal es suficiente»: esa es la trampa clásica. El almacenamiento seguro de contraseñas también depende de generar y guardar la sal, ajustar el coste y manejar las diferencias de tiempo. En lugar de montar eso tú mismo, apóyate en la función oficial de contraseñas de tu lenguaje/framework (la mayoría usan bcrypt/Argon2 por debajo). Para sistemas nuevos, haz de Argon2id tu primera opción.

Sigue leyendo

FAQ

Q¿En qué se diferencia el hashing del cifrado?
A

El cifrado es reversible: con la clave puedes descifrar los datos de vuelta, que es lo que quieres para datos que volverás a leer. El hashing es de un solo sentido: no se puede revertir. En realidad no necesitas poder volver a leer una contraseña, ni siquiera tú, así que un hash deliberadamente irreversible encaja. Aunque roben la base de datos, no puedes extraer las contraseñas originales directamente de los hashes.

Q¿Es bastante seguro hacer hashing con MD5 o SHA-256?
A

No, no por sí solos. MD5/SHA-256 son hashes 'rápidos', así que un atacante puede probar un número enorme de conjeturas por segundo, y las contraseñas comunes caen ante la fuerza bruta o las tablas arcoíris (tablas de búsqueda precalculadas). Para hacerlo seguro, añade una 'sal' por usuario y usa un hash deliberadamente lento y diseñado a propósito (bcrypt, Argon2 o scrypt).

Q¿Cuál debería usar en la práctica?
A

Para sistemas nuevos, Argon2 (sobre todo Argon2id) es la primera opción, con bcrypt o scrypt como alternativas sólidas. Todos integran en su diseño el salteo y un factor de coste ajustable. En lugar de montar MD5+sal tú mismo, usa estas implementaciones estándar (las funciones oficiales de tu lenguaje/framework): es más seguro y más fiable.