Generador y verificador bcrypt
Genera un hash bcrypt con un factor de coste de 4 a 14, comprueba una contraseña con un hash existente y consulta su versión, coste, sal y resumen.
Generar el hash de una contraseña
- Versión
- Coste
- Sal (22 caracteres)
- Hash (31 caracteres)
Comprobar una contraseña con un hash
- Versión
- Coste
- Sal (22 caracteres)
- Hash (31 caracteres)
Cómo generar el hash bcrypt de una contraseña
- En Generar el hash de una contraseña, escribe la Contraseña. Un contador muestra su longitud en bytes UTF-8 y te avisa cuando supera los 72 bytes.
- Elige el Factor de coste (4–14). La línea de debajo indica el número de rondas, por ejemplo 10 → 2^10 = 1024 rondas.
- Haz clic en Generar hash. Una barra de progreso sigue el cálculo y la página sigue respondiendo mientras tanto. Al terminar, la herramienta muestra el tiempo empleado y el Hash bcrypt, listo para copiar.
- El hash se desglosa en sus partes: Versión, Coste, Sal (22 caracteres) y Hash (31 caracteres).
Para comprobar una contraseña con un hash, escribe la contraseña, pega el hash (el que acabas de generar se rellena automáticamente) y haz clic en Comprobar contraseña. El resultado indica si coinciden. Marca Ocultar contraseñas para enmascarar los dos campos de contraseña.
El cálculo se hace en tu navegador con la biblioteca bcryptjs, que solo se carga la primera vez que la necesitas. Ninguna contraseña ni ningún hash se envía a ningún sitio.
Cómo funciona bcrypt
bcrypt (Provos y Mazières, 1999) es una función de hash de contraseñas basada en el cifrado Blowfish. A diferencia de SHA-256, es lenta a propósito, y esa lentitud es ajustable: el factor de coste es una potencia de dos, así que cada +1 duplica el trabajo. Un coste de 10 significa 1024 iteraciones de la costosa preparación de clave; un coste de 12, 4096. Esa lentitud apenas se nota cuando un usuario inicia sesión, pero encarece muchísimo un ataque de fuerza bruta sobre una base de datos robada.
Un hash como $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy se lee así:
$2b$: la versión.$2a$y$2y$(PHP) son compatibles y se pueden comprobar aquí;$2x$identifica hashes de una implementación antigua con errores y se rechaza.10: el factor de coste.- Los 22 caracteres siguientes: una sal aleatoria de 128 bits, en el alfabeto Base64 propio de bcrypt (
./A-Za-z0-9). - Los últimos 31 caracteres: el resultado de 184 bits.
Como la sal es aleatoria y se guarda dentro del hash, procesar dos veces la misma contraseña da dos hashes distintos, y ambos se verifican correctamente. Por eso una contraseña se comprueba con una función de verificación y no comparando hashes.
Cómo elegir el coste
Elige el coste más alto que tu servidor pueda asumir manteniendo inicios de sesión rápidos, normalmente alrededor de un cuarto de segundo por hash. OWASP recomienda un coste mínimo de 10 para bcrypt. Los navegadores ejecutan bcrypt en JavaScript, varias veces más lento que una implementación nativa en servidor: a partir de un coste de 12, la herramienta avisa de que el cálculo puede tardar de uno a varios segundos, y cada paso adicional duplica el tiempo. El trabajo se reparte en fragmentos cortos para que la página no se congele.
Para sistemas nuevos, OWASP prefiere ahora Argon2id, y bcrypt sigue siendo aceptable cuando Argon2id no está disponible.
El límite de 72 bytes
bcrypt solo usa los primeros 72 bytes de la contraseña; el resto se ignora sin avisar. Bytes no es lo mismo que caracteres: una letra con tilde o la ñ ocupan 2 bytes en UTF-8 y un emoji ocupa 4. Dos contraseñas largas que comparten los primeros 72 bytes producen el mismo hash. El contador de bytes te avisa cuando una contraseña es demasiado larga. Algunos sistemas aplican un hash previo a las contraseñas largas (por ejemplo HMAC-SHA256 y luego Base64) antes de bcrypt; si lo haces, nunca pases el resumen binario en bruto, porque un byte cero terminaría la contraseña antes de tiempo en muchas implementaciones.
Preguntas frecuentes
¿Por qué la misma contraseña da un hash distinto cada vez?
Cada hash recibe una sal aleatoria nueva, que se guarda dentro del propio hash. El botón Comprobar contraseña lee la sal y el coste del hash y vuelve a calcularlo, así que todas las versiones se verifican.
¿Se puede descifrar un hash bcrypt?
No. bcrypt es una función de un solo sentido. La única forma de recuperar una contraseña es adivinarla y calcular el hash de cada intento, justo lo que el factor de coste hace lento.
¿Qué factor de coste debo usar?
Al menos 10, y más si tu servidor sigue respondiendo con rapidez. Mide en tu hardware de producción: el tiempo que se muestra aquí refleja JavaScript en tu navegador, normalmente más lento que un servidor.
¿Son intercambiables los hashes $2a$, $2b$ y $2y$?
Para contraseñas de menos de 256 bytes dan el mismo resultado, y esta herramienta comprueba los tres. $2b$ corrigió un error de desbordamiento de longitud en la implementación de OpenBSD, y $2y$ es el nombre que usa PHP para una implementación correcta.
¿Es seguro escribir aquí una contraseña real?
Todo se ejecuta localmente y no se envía ni se guarda nada. Aun así, para cuentas reales es buena práctica probar con una contraseña de ejemplo y no con una que uses.
Herramientas relacionadas
- Generador de hash Genera hashes MD5, SHA-1, SHA-256 y SHA-512 de textos o de archivos de cualquier tamaño y verifica sumas de comprobación. Todo en tu navegador.
- Generador de contraseñas Generador de contraseñas gratis que crea contraseñas seguras y aleatorias de 4 a 128 caracteres en tu navegador. No se guarda ni se envía nada.
- Comprobador de seguridad de contraseñas Comprueba si tu contraseña es segura: puntuación, tiempo estimado para descifrarla en cuatro tipos de ataque y consejos, todo en tu navegador.
- Generador HMAC Calcula un HMAC-SHA1, SHA-256, SHA-384 o SHA-512 con una clave en texto, hex o Base64, obtén la salida en hex y Base64 y verifica firmas de webhook.