Generador Bcrypt Online — Gratuito, 100% Cliente, Sin Registro
Genera y verifica hashes bcrypt completamente en tu navegador — sin servidor, sin datos registrados. Todo se procesa localmente con bcryptjs, una implementación pura en JavaScript. Abre DevTools, observa la pestaña Network vacía y compruébalo tú mismo: tu contraseña nunca sale de tu máquina.
Esta herramienta va más allá del flujo básico de generar y verificar. Mide el tiempo real de hashing en tu hardware para cada factor de coste, analiza cualquier hash bcrypt existente para entender su estructura, y copia código listo para ejecutar en ocho lenguajes de programación.
Cómo Usar el Generador Bcrypt
Obtener un hash bcrypt a partir de una contraseña lleva menos de cinco segundos:
- Pega o escribe tu contraseña en el campo "Input Password" — el badge "CLIENT-SIDE SECURE" confirma que no se hará ninguna petición de red.
- Ajusta el factor de coste con el slider (4–18). El coste 12 es el valor predeterminado recomendado por OWASP; valores mayores aumentan la seguridad pero también el tiempo de hash.
- Haz clic en "Generate Bcrypt Hash" — el hash aparece inmediatamente, junto con el tiempo exacto que tardó en tu dispositivo actual.
- Copia el hash con el botón de copia o presiona
Shift+Enterfuera de los campos de entrada.
Para verificar una contraseña contra un hash existente, cambia a la pestaña Verify Hash, introduce ambos valores y haz clic en "Verify Match".
Ejemplos de Hash Bcrypt
Bcrypt siempre produce una cadena de exactamente 60 caracteres. Debido al salt aleatorio, la misma contraseña hasheada dos veces siempre producirá hashes diferentes — pero ambos verificarán correctamente contra la contraseña original.
Ejemplo — factor de coste 12 (predeterminado OWASP):
Entrada: micontraseñasecreta
Salida: $2b$12$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
Ejemplo — misma contraseña, hashes diferentes:
Entrada: micontraseñasecreta (hasheada dos veces en coste 12)
Hash 1: $2b$12$nOUIs5kJ7naTuTFkBy1veu...
Hash 2: $2b$12$aBcDeFgHiJkLmNoPqRsTuv... ← salt diferente, ambos válidos
Caso extremo — límite de 72 bytes:
Entrada 1: [72 caracteres 'a']
Entrada 2: [100 caracteres 'a']
Resultado: ambas producen hashes equivalentes — los bytes más allá de 72 se ignoran silenciosamente
Formato del Hash Bcrypt — Qué Significa Cada Parte
Todo hash bcrypt tiene exactamente la misma estructura. Para $2b$12$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa:
| Segmento | Valor | Significado |
|---|---|---|
| Versión | $2b$ |
Versión del algoritmo — siempre usa $2b$ en implementaciones nuevas |
| Coste | 12 |
2¹² = 4.096 iteraciones |
| Salt | nOUIs5kJ7naTuTFkBy1veu |
22 chars, salt aleatorio de 128 bits codificado en base64 |
| Hash | K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa |
31 chars, el checksum de la entrada |
Los prefijos de versión: $2a$ es la spec original con un bug en implementaciones con caracteres de 8 bits; $2b$ es el estándar corregido actual; $2y$ es el equivalente PHP de $2b$. Siempre usa $2b$ en código nuevo.
Qué Es Bcrypt y Por Qué Importa
Bcrypt es una función de hash de contraseñas diseñada por Niels Provos y David Mazières en 1999, basada en el cifrado Blowfish. A diferencia de MD5 o SHA-256 — que son funciones rápidas de propósito general — bcrypt es intencionalmente lento. Su factor de coste es ajustable, lo que permite aumentar el trabajo computacional a medida que el hardware mejora, manteniendo los ataques de fuerza bruta económicamente inviables.
Bcrypt genera e incrusta automáticamente un salt aleatorio único en cada hash. Esto previene los ataques de rainbow table, donde los atacantes usan tablas precomputadas para revertir hashes comunes. Incluso si dos usuarios tienen la misma contraseña, sus hashes bcrypt serán diferentes.
Casos de Uso Comunes
- Sistemas de autenticación de usuarios: Hash de contraseñas antes de almacenarlas en base de datos. En el inicio de sesión,
bcrypt.compare()ejecuta el mismo algoritmo con el salt almacenado y confirma la coincidencia en tiempo constante, previniendo timing attacks. - Migración desde algoritmos débiles: Re-hashea progresivamente contraseñas de MD5/SHA-1 a bcrypt. En un inicio de sesión exitoso con el hash antiguo, verifica la contraseña y reemplaza inmediatamente el hash almacenado por uno bcrypt.
- Calibración del factor de coste: Ejecuta el benchmark local en el hardware de tu servidor de producción para encontrar el factor de coste más alto que mantenga la latencia de login bajo tu umbral de UX (típicamente 300ms–1s).
- Auditorías de seguridad: Pega un hash existente en el parser para verificar que usa
$2b$, confirmar que el factor de coste cumple los mínimos de OWASP, y comprobar que las longitudes de salt y hash son correctas.
Errores Comunes con Bcrypt
- Usar coste 4–8 en producción: Estos valores completan en menos de 1ms y no ofrecen resistencia significativa a fuerza bruta. Coste 4 existe solo para pruebas unitarias donde la velocidad importa. Usa coste 10 como mínimo absoluto, coste 12 como valor predeterminado.
- Hashear hashes ya hasheados: Ejecutar bcrypt sobre un hash bcrypt produce una cadena doblemente codificada que nunca podrá verificarse. Siempre hashea solo el texto plano original.
- Ignorar el límite de 72 bytes: Bcrypt trunca silenciosamente la entrada a 72 bytes. Si tu aplicación permite contraseñas más largas que ~72 caracteres ASCII, considera pre-hashear con SHA-256 antes de bcrypt, o usa Argon2id que no tiene este límite.
- Almacenar el salt por separado: Bcrypt incrusta el salt dentro de la cadena de 60 caracteres. No necesitas una columna
saltseparada. Almacena solo el hash bcrypt completo.
Preguntas Frecuentes
¿Cuántos rounds de bcrypt debo usar?
OWASP recomienda el factor de coste 12 como punto de partida, apuntando a aproximadamente 250ms por hash en hardware moderno. El valor correcto depende de tu servidor específico — usa el benchmark local de esta página para medir el tiempo real, luego elige el factor más alto que mantenga la latencia de autenticación bajo tu umbral de UX (típicamente 300ms–1s).
¿Puede revertirse o descifrarse un hash bcrypt?
No. Bcrypt es una función unidireccional — no existe método matemático para derivar la contraseña original de un hash. El único enfoque es fuerza bruta: adivinar contraseñas, hashear cada una con el salt almacenado y comparar. El alto número de iteraciones lo hace computacionalmente costoso.
¿Cuál es la diferencia entre los prefijos $2a$ y $2b$ en bcrypt?
$2a$ es la especificación original de 1999. Algunas implementaciones tenían un bug en casos extremos con contraseñas que contienen caracteres por encima del rango de 8 bits. $2b$ corrige ese bug y es el estándar actual. $2y$ es una variante PHP matemáticamente equivalente a $2b$. Para cualquier nueva implementación, usa $2b$.
¿Admite bcrypt contraseñas de más de 72 caracteres?
Bcrypt procesa solo los primeros 72 bytes de cualquier entrada. Los caracteres más allá de 72 bytes se ignoran silenciosamente. Si tu aplicación permite contraseñas más largas, considera pre-hashear con SHA-256 antes de bcrypt, o cambia a Argon2id que no tiene límite de longitud.
¿Es seguro usar esta herramienta con contraseñas reales?
Todo el procesamiento ocurre en tu navegador usando bcryptjs — ningún dato se envía a ningún servidor. Sin embargo, como buena práctica, evita introducir contraseñas de producción reales en cualquier herramienta online. Úsala para pruebas, desarrollo y aprendizaje.
Recursos
- OWASP Password Storage Cheat Sheet — Guía autoritativa sobre algoritmos recomendados, factores de coste y estrategias de migración.
- bcryptjs en GitHub — La biblioteca JavaScript pura que impulsa esta herramienta — sin dependencias nativas, funciona en cualquier navegador.