Configuración
Genera hashes bcrypt para guardar contraseñas y verifica si una contraseña corresponde a un hash existente. En modo Generar elegí el costo y la versión; en modo Verificar pegá el hash y la contraseña a 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, usá 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 costo 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 costo 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 costo es el logaritmo en base 2 de la cantidad de rondas: con costo 10 se calculan 1024 rondas y con costo 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: pegalo en modo Verificar con esa contraseña y coincide.
abc$2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0iUn vector de prueba de jBCrypt con costo 6. Los primeros 22 caracteres después del costo 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 costo 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é costo 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 acento o los emojis ocupan 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 costo 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.