Generador de bcrypt
Cree un hash de contraseña bcrypt con una sal aleatoria de 16 bytes y un factor de coste de 4 a 12. La herramienta devuelve la cadena modular estándar que empieza por $2a$, que aceptan PHP password_verify, Node.js bcrypt, Spring Security y la mayoría de los frameworks. Úsela para crear usuarios de prueba, restablecer una contraseña de administrador en una base de datos o comprobar su propio código de hashing. La contraseña nunca se muestra ni se almacena.
Preguntas frecuentes
¿Qué es bcrypt?
Bcrypt es una función de hashing de contraseñas de 1999 basada en el cifrado Blowfish. Combina una sal aleatoria con un coste ajustable, de modo que cada paso adicional del coste duplica el trabajo que necesita un atacante por intento. Sigue siendo una opción ampliamente compatible para almacenar contraseñas.
¿Qué significa la cadena de salida?
Un hash como $2a$10$ seguido de 53 caracteres contiene la versión 2a, el coste 10, una sal de 22 caracteres y un hash de 31 caracteres, todos en el alfabeto Base64 propio de bcrypt. Guarde la cadena completa, porque el verificador obtiene de ella la sal y el coste.
¿Qué factor de coste debo elegir?
La herramienta permite un coste de 4 a 12 y usa 10 de forma predeterminada, un valor común en los frameworks. Cada paso duplica el tiempo, por lo que el coste 12 tarda aproximadamente cuatro veces más que el coste 10. En producción, elija el coste más alto que sus servidores puedan manejar en aproximadamente 100 a 250 milisegundos.
¿Por qué el coste está limitado a 12?
Los costes más altos tardan segundos por hash y permitirían que una solicitud ocupara el servidor durante mucho tiempo. El coste 12 ya es sólido para la mayoría de las aplicaciones, y puede volver a calcular el hash con un coste superior en su propio entorno si es necesario.
¿Por qué la misma contraseña produce un hash distinto cada vez?
La herramienta genera una nueva sal aleatoria de 16 bytes para cada hash. Las distintas sales generan cadenas diferentes, pero todas se verifican con la misma contraseña. Esto impide que los atacantes usen tablas precalculadas.
¿Hay un límite de longitud para las contraseñas?
Sí. Bcrypt solo usa los primeros 72 bytes de una contraseña, por lo que la herramienta rechaza las contraseñas más largas en lugar de ignorar el resto sin avisar. Los caracteres no ASCII ocupan varios bytes cada uno en UTF-8.
¿Aceptarán PHP o Laravel un hash $2a$?
Sí. PHP password_verify, Laravel, Symfony y los complementos de WordPress que usan password_hash aceptan hashes $2a$, $2b$ y $2y$, que solo se diferencian por correcciones históricas de errores. Node.js bcrypt, bcryptjs, Python bcrypt y Spring Security también aceptan $2a$.
¿Se almacena o registra mi contraseña?
No. La contraseña solo se usa para calcular el hash durante la solicitud. Se elimina de la respuesta y nunca se escribe en registros ni en almacenamiento.
¿Debería usar bcrypt o Argon2?
Argon2id es la recomendación más reciente de OWASP porque requiere mucha memoria, lo que encarece los ataques con GPU. Bcrypt sigue siendo aceptable y cuenta con una compatibilidad muy amplia con bibliotecas, así que es una buena opción cuando Argon2 no está disponible.
¿Cómo compruebo una contraseña frente a un hash bcrypt?
Usa Bcrypt Verifier en este sitio o llama a la función verify de tu framework. Nunca compares directamente las cadenas bcrypt, porque un hash nuevo de la misma contraseña siempre tiene un aspecto distinto.