Generador de bcrypt - Crea hashes de contraseña online
Bcrypt Generator
Hashing runs locally in your browser. Your password is never uploaded or stored.
Qué es
Un hash de contraseña es una función unidireccional que convierte una contraseña en una cadena de longitud fija de modo que la contraseña original no se pueda recuperar a partir de ella, pero la misma contraseña se puede comprobar más tarde hasheándola de nuevo y comparando. bcrypt es el algoritmo concreto que implementa esta herramienta, diseñado por Niels Provos y David Mazières y publicado en 1999 como esquema de hashing de contraseñas de OpenBSD. Pertenece a la familia de funciones de derivación de claves adaptativas o deliberadamente caras y está construido sobre el cifrador de bloques Blowfish.
Estructuralmente, bcrypt genera una sal aleatoria de 128 bits, la mezcla con la contraseña y luego ejecuta el costoso plan de claves EksBlowfish un número ajustable de veces, donde ese número es el logaritmo en base 2 del coste de trabajo. Como esa sal va incrustada en la salida, dos hashes bcrypt de la misma contraseña son cadenas distintas, lo que impide que un atacante detecte cuentas que comparten contraseña. La salida usa el formato modular crypt, que empieza con un prefijo de versión, luego el coste, luego una codificación base64 de la sal de 22 caracteres y después una codificación de 31 caracteres del hash resultante, todo separado por signos de dólar.
Dos consecuencias importan en la práctica. Primera, bcrypt ignora silenciosamente cualquier entrada posterior a 72 bytes, así que toda contraseña más larga debería prehashearse antes de aplicarle bcrypt; de lo contrario, dos contraseñas largas que compartan prefijo serían intercambiables. Segunda, el algoritmo es unidireccional por diseño: la verificación exige la contraseña en texto plano, y por eso bcrypt nunca debe usarse para nada que necesites leer de nuevo, como recordar el número de una tarjeta.
Cómo usar
- Abre el Generador de bcrypt en tu navegador. El hashing se realiza en local, así que tu contraseña nunca se sube a ninguna parte.
- Introduce la contraseña que quieras hashear en el campo de entrada. Considera una frase larga, porque la longitud aporta mucha más resistencia que sustituir símbolos.
- Elige un factor de trabajo entre 4 y 15, o déjalo en el valor por defecto recomendado si dudas. Los costes más altos tardan proporcionalmente más y son más difíciles de atacar.
- Comprueba el tiempo que aparece junto al coste para confirmar que se ajusta a tu objetivo, normalmente entre 150 y 400 milisegundos en hardware de producción.
- Haz clic en Generar para obtener el hash y copia la cadena resultante, incluido el prefijo de versión, el coste y la sal, a tu gestor de contraseñas.
- Usa la sección de verificación para comprobar una contraseña contra un hash existente cuando pruebes una integración o migres credenciales ya almacenadas.
- Guarda la cadena de hash completa y no solo su parte final, porque bcrypt necesita que el prefijo de versión, coste y sal estén presentes para poder verificarla más adelante.
Ejemplos
Entrada: Contraseña: correct-horse-battery-staple, coste 10
Proceso:
Salt aleatorio de 128 bits, 2^10 rondas EksBlowfish, codificación base64Resultado: Hash de 60 caracteres que empieza por $2b$10$ — la verificación exige el mismo texto plano
Entrada: La misma contraseña hasheada dos veces con el mismo coste
Proceso:
Se genera un salt aleatorio nuevo en cada invocaciónResultado: Dos cadenas de hash completamente diferentes para una entrada idéntica
Entrada: Comparación de costes en hardware de servidor típico
Proceso:
Coste 10 ejecuta 2^10 rondas, coste 12 ejecuta 2^12, coste 14 ejecuta 2^14Resultado: Cada subida cuadruplica aproximadamente el trabajo, así que el coste 14 es unas 16 veces el coste 10
Búsquedas Relacionadas
La gente también busca: generador de bcrypt, hash bcrypt, generador de hash de contraseña, factor de coste bcrypt, salt de bcrypt, hashear contraseña.
generador de bcrypthash bcryptgenerador de hash de contraseñafactor de coste bcryptsalt de bcrypthashear contraseñaverificar hash bcryptbcrypt frente a sha256rondas de bcryptgenerar hash con salthashing seguro de contraseñasherramienta de hashingbcrypt onlinealternativa a bcryptfactor de trabajo bcryptbcrypt en nodebcrypt en pythonhash unidireccionalcoste 12 bcrypthash de contraseña offline
Preguntas Frecuentes
¿Qué factor de coste debería usar para bcrypt?
Para la mayoría de sistemas de producción, un factor de trabajo de 12 es un valor por defecto sólido, que da del orden de 250 a 400 milisegundos por hash en hardware de servidor típico, mientras que un coste 10 hoy resulta a menudo demasiado rápido para resistir a un atacante dedicado con GPUs modernas. La propiedad importante es que debes elegir una cifra que haga que tu propio flujo de inicio de sesión parezca normal, porque el hashing ocurre durante la autenticación y cualquier cosa perceptiblemente lenta es un problema de usabilidad que empuja a la gente hacia atajos de reautenticación. Si tus servidores son inusualmente potentes, mide en coste 12 y sube a 13 o 14 hasta que un solo hash tarde unos cientos de milisegundos. Nunca elijas un coste copiando el número de otro proyecto, ya que esa cifra solo significa algo en relación con el hardware que hace el trabajo, y trata cualquier coste almacenado como algo que hay que volver a medir y aumentar a medida que mejora el hardware.
¿Por qué dos hashes de la misma contraseña son distintos?
Porque bcrypt genera una sal aleatoria de 128 bits nueva para cada hash. Esa sal no es un secreto, simplemente se registra en la salida para que el paso de verificación pueda reproducir el cálculo original, pero su aleatoriedad garantiza que contraseñas idénticas produzcan cadenas de hash completamente sin relación entre cuentas distintas. Esto inutiliza toda una clase de ataques de precomputación, incluidas las tablas arcoíris, en las que un atacante hashea por adelantado cada contraseña probable una sola vez y luego busca coincidencias. También evita una fuga más sutil, donde un atacante que obtiene tu tabla de usuarios vería de inmediato qué cuentas comparten contraseña solo comparando las cadenas de hash. La implicación práctica es que no puedes detectar una contraseña reutilizada comparando los hashes bcrypt almacenados, y la comprobación debe hacerse verificando contraseñas candidatas, que es exactamente el motivo por el que detectar contraseñas reutilizadas exige probar deliberadamente una contraseña contra otras cuentas.
¿Es mejor bcrypt o SHA-256 para guardar contraseñas?
Usa bcrypt, y la razón es el factor de coste y no ninguna matemática ingeniosa. Una sola ronda de SHA-256 está diseñada para ser extremadamente rápida, y eso es precisamente lo que no quieres al guardar contraseñas, porque una GPU puede calcular miles de millones por segundo y un atacante que prueba una tabla de hashes filtrada obtiene cantidades enormes de intentos gratis. bcrypt es intencionadamente lento y su coste por hash es ajustable, así que puedes aumentarlo con el tiempo conforme mejora el hardware sin cambiar el formato almacenado. Argon2id es hoy la opción preferida allí donde esté disponible y es en general la recomendación más sólida para sistemas nuevos, mientras que bcrypt sigue siendo perfectamente aceptable y está mucho más ampliamente soportado. Lo que nunca debes hacer es guardar contraseñas como SHA-256 simple, ni como cualquier hash sin sal, sea cual sea el algoritmo que elijas.
¿Se puede revertir un hash bcrypt para obtener la contraseña original?
No, y esa es precisamente la razón de elegir un hash de contraseña en lugar de un cifrado. bcrypt es una función unidireccional, así que no hay ninguna clave, ningún ajuste ni ninguna herramienta de pago que convierta un hash de vuelta en la contraseña. La única forma práctica de recuperar una contraseña a partir de un hash bcrypt es adivinar contraseñas candidatas, hashear cada una con el mismo coste y la misma sal y comparar, que es justo el ataque que bcrypt está diseñado para hacer lento. Esto explica también una restricción que sorprende a la gente: no puedes usar bcrypt para nada que necesites leer más adelante, como números de tarjeta almacenados, claves de cifrado de clientes o recuperación de contraseña reversible, porque el sistema no podría recuperar el valor original. Eso necesita cifrado real con una clave gestionada, no un hash unidireccional.
¿Qué pasa si olvido el coste y la sal al guardar un hash?
Entonces el hash no se podrá verificar nunca y la cuenta será irrecuperable, porque bcrypt necesita las cuatro partes de la cadena para reproducir el cálculo. Un hash bcrypt completo es el prefijo de versión, el coste, la sal y el hash resultante, unidos por signos de dólar, y siempre tiene 60 caracteres de longitud. Bibliotecas como bcryptjs y el paquete bcrypt de Python devuelven toda esa cadena completa desde una sola llamada a generate, así que tu columna de base de datos debe guardar el valor entero y no una porción recortada. Guardar solo el segmento final, o solo la parte posterior a la sal, rompe el inicio de sesión en silencio para todos los usuarios, y depurar la contraseña no servirá de nada. Una comprobación de longitud de 60 caracteres es una prueba de cordura útil en cualquier columna destinada a alojar hashes bcrypt.
¿Tiene bcrypt una longitud máxima de contraseña?
bcrypt solo considera los primeros 72 bytes de la contraseña e ignora todo lo que vaya más allá, un artefacto histórico de su plan de claves Blowfish más que un límite de seguridad deliberado. La consecuencia práctica es que dos contraseñas de más de 72 bytes que compartan prefijo se autentican entre sí, así que una frase de paso de 100 caracteres cuyos primeros 72 bytes coincidan con los de otra se trataría como la misma contraseña. Este es un riesgo real con frases de paso largas, que es justo el tipo de contraseña que deberías alentar, y valores largos como oraciones completas pueden superar el límite con facilidad. La mitigación estándar es prehashear la contraseña con SHA-256 y base64 y pasar después ese resultado de longitud fija a bcrypt. Si la biblioteca de tu lenguaje lo gestiona automáticamente, prefiere esa implementación y, en caso contrario, verifica el comportamiento antes de depender de frases de paso muy largas.