¿Qué es bcrypt?
Bcrypt es una función de hashing de contraseñas diseñada por Niels Provos y David Mazières, basada en el cifrado Blowfish. A diferencia de resúmenes rápidos como MD5 o SHA-256, bcrypt es deliberadamente lento y computacionalmente costoso — esto hace que los ataques de fuerza bruta contra hashes de contraseñas robados sean poco prácticos. Bcrypt genera automáticamente una sal aleatoria por contraseña, así que contraseñas idénticas producen hashes diferentes.
¿Cómo funciona bcrypt?
El algoritmo bcrypt se ejecuta completamente en tu navegador. Esto es lo que sucede paso a paso:
- Tu contraseña se codifica como bytes UTF-8 y se introduce en el programa de claves de bcrypt, que inicializa el array P de 4.184 bytes y las cajas S del cifrado Blowfish usando la contraseña y la sal.
- Se genera una sal aleatoria de 128 bits. La sal se mezcla en el programa de claves de modo que cada sal única produce un hash completamente diferente incluso para la misma contraseña.
- El programa de claves se ejecuta durante 2^costo rondas (ej., 2^10 = 1.024 iteraciones con costo 10). Cada iteración vuelve a cifrar la sal y las entradas del array P, haciendo que el cálculo sea más lento a medida que aumenta el costo.
- El resultado final es una cadena de 60 caracteres en el formato
$2b$<cost>$<salt><hash>, donde cost tiene cero a la izquierda (ej., 10), salt son 22 caracteres Base64, y hash son 31 caracteres Base64. - Para la verificación, el mismo algoritmo se ejecuta de nuevo con la contraseña candidata y la sal extraída del hash almacenado. Si el hash derivado coincide con el almacenado, la contraseña es correcta.
¿Qué factor de costo debería usar?
El factor de costo es el logaritmo del número de iteraciones — costo 10 significa 2^10 = 1.024 rondas, costo 12 significa 4.096 rondas. Elige según tus necesidades de seguridad y hardware:
- Costo 4-6 (16-64 rondas) — solo para desarrollo y pruebas. Demasiado rápido para producción; proporciona protección mínima.
- Costo 8 (256 rondas) — mínimo indispensable para aplicaciones no críticas. Alrededor de 6 ms en hardware moderno.
- Costo 10 (1.024 rondas) — línea base recomendada actualmente. Tarda unos 25 ms. Adecuado para la mayoría de aplicaciones web.
- Costo 12 (4.096 rondas) — recomendado para portales de administración, sistemas financieros y aplicaciones de alta seguridad. Tarda unos 100 ms.
- Costo 14 (16.384 rondas) — alta seguridad. Tarda unos 400 ms. Úsalo para contraseñas maestras, claves de cifrado, o cuando la latencia de inicio de sesión sea aceptable.
¿Por qué usar este generador de bcrypt?
- Tu privacidad está protegida — cada contraseña se hashea localmente en tu navegador y ningún dato sale nunca de tu dispositivo.
- Tienes ambos modos lado a lado: generar nuevos hashes o verificar existentes sin cambiar de página.
- El factor de costo es ajustable de 4 (rápido) a 15 (muy lento), para que puedas igualar las necesidades de seguridad de tu aplicación.
- Los hashes usan el formato estándar
$2b$que funciona con todos los lenguajes y frameworks principales.
¿Cuáles son las aplicaciones comunes de bcrypt?
Bcrypt se usa ampliamente para el almacenamiento y verificación de contraseñas en la industria:
- Autenticación de aplicaciones web — almacenar hashes de contraseñas de usuarios en bases de datos para que nunca se guarden contraseñas en texto plano.
- Hashing de claves API — hashear secretos de API antes de almacenarlos para que una brecha de base de datos no filtre credenciales válidas.
- Auditoría de migración — verificar que los hashes de contraseñas heredados de un sistema antiguo aún autentiquen usuarios después de actualizar la capa de autenticación.
¿Cómo se ve un hash bcrypt?
Hashear la contraseña hunter2 con factor de costo 10 produce una cadena como $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy. El formato se desglosa como: $2b$ (versión del algoritmo), 10 (factor de costo), $, luego 22 caracteres de sal y 31 caracteres de hash, todo codificado en Base64. Cada ejecución con la misma contraseña produce un hash diferente debido a la sal aleatoria.
Este generador de bcrypt se ejecuta completamente en tu navegador usando una implementación en JavaScript puro. Hashea contraseñas antes de almacenarlas, verifica hashes existentes y ajusta el factor de costo según tus requisitos de seguridad — todo sin enviar un solo byte a un servidor.