Configuración
Genera hashes bcrypt para guardar contraseñas y verifica si una contraseña corresponde a un hash existente. En modo Generar elige el coste y la versión; en modo Verificar pega el hash y la contraseña que quieras comprobar. El resultado muestra cada parte del hash y cuánto tardó en calcularse.

Un hash bcrypt no se puede "desencriptar": para saber si una contraseña es la correcta, usa el modo Verificar. Todo se calcula en tu navegador y la contraseña no se envía a ningún servidor.

Parámetros
Entre 4 y 15

Versión actual. La generan OpenBSD, Node.js, Python, Go y Rust.

Cada punto de coste duplica el tiempo de cálculo. OWASP recomienda 10 como mínimo; lo ideal es el valor más alto que tu servidor calcule en unos 250 ms.

0 de 72 bytes

Cómo funciona

bcrypt es una función de hash diseñada para guardar contraseñas. A diferencia de SHA-256 o MD5, que se calculan en microsegundos, bcrypt es lenta a propósito: así, quien robe una base de datos tarda años en probar contraseñas por fuerza bruta.

Cada hash guarda todo lo necesario para verificarlo: la versión del algoritmo, el coste y un salt aleatorio de 128 bits. Por eso la misma contraseña da un hash distinto cada vez y no hace falta almacenar el salt por separado.

El coste es el logaritmo en base 2 de la cantidad de rondas: con coste 10 se calculan 1024 rondas y con coste 12, 4096. Subir un punto duplica el tiempo de cálculo, lo que permite acompañar el aumento de potencia del hardware sin cambiar de algoritmo.

Ejemplos

rasmuslerdorf$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1aEl ejemplo de password_verify() del manual de PHP: pégalo en modo Verificar con esa contraseña y coincide.
abc$2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0iUn vector de prueba de jBCrypt con coste 6. Los primeros 22 caracteres después del coste son el salt; los 31 restantes, el resultado.

Casos de uso

  • Crear el hash de la contraseña inicial de un usuario administrador para insertarlo directamente en la base de datos.
  • Comprobar si una contraseña corresponde al hash guardado cuando un usuario no puede iniciar sesión.
  • Generar hashes de prueba para fixtures, seeds o pruebas automatizadas de una aplicación Laravel, Spring, Django o Node.js.
  • Medir cuánto tarda cada coste para elegir el valor adecuado antes de configurarlo en el servidor.
  • Crear entradas para archivos .htpasswd de Apache, que aceptan hashes bcrypt con prefijo $2y$.

Preguntas frecuentes

¿Se puede desencriptar un hash bcrypt?

No. bcrypt es una función de un solo sentido: no existe forma de obtener la contraseña a partir del hash. Lo único posible es probar contraseñas candidatas y ver si alguna coincide, que es justamente lo que bcrypt hace lento.

¿Qué diferencia hay entre $2a$, $2b$ y $2y$?

Las tres calculan lo mismo para contraseñas normales. $2a$ es la versión original; $2y$ la introdujo PHP en 2011 para distinguir sus hashes de los de una implementación con un error; $2b$ la adoptó OpenBSD en 2014 al corregir otro error con contraseñas de más de 255 caracteres. Casi todas las bibliotecas aceptan las tres al verificar.

¿Qué coste conviene usar?

OWASP recomienda 10 como mínimo. Lo ideal es el valor más alto que tu servidor pueda calcular en unos 250 ms por inicio de sesión. Spring Security usa 10 por defecto; Laravel 11 y PHP 8.4 subieron el suyo a 12.

¿Por qué bcrypt ignora lo que pasa de 72 bytes?

El algoritmo usa la contraseña como clave de Blowfish, que admite hasta 72 bytes. Lo que sobra se descarta sin aviso, así que dos contraseñas que comparten los primeros 72 bytes dan el mismo hash. Los caracteres con tilde o los emojis ocupan de dos a cuatro bytes; por eso la herramienta cuenta bytes y no caracteres.

¿Es mejor bcrypt o Argon2?

Argon2id es el algoritmo recomendado hoy para sistemas nuevos porque, además de lento, usa mucha memoria, lo que encarece los ataques con GPU. Aun así, bcrypt sigue siendo seguro con un coste adecuado y es el que viene por defecto en PHP, Laravel, Spring y Ruby on Rails.

¿Mi contraseña se envía a algún servidor?

No. El hash y la verificación se calculan en tu navegador y la contraseña nunca sale de tu dispositivo; tampoco se incluye en el enlace para compartir la herramienta.