bcrypt Hash y Verificación
CifradoHaz un hash de una contraseña con bcrypt (costo adaptativo), o verifica un texto plano contra un hash $2a$ / $2b$ existente. Costo ajustable, temporización calibrada — todo en tu navegador.
No se recuperan URLs remotas; pega tu JSON directamente.
⚠ Un costo más alto es más lento y más seguro
En esta página
¿Qué es bcrypt?#
bcrypt es una función de hash de contraseñas construida específicamente para ser lenta a propósito. Mientras que un hash rápido como SHA-256 está diseñado para procesar megabytes por segundo, bcrypt está diseñado para costar tiempo real por cada intento individual, de modo que un atacante que roba una base de datos de hashes de contraseñas no pueda probar miles de millones de intentos baratalemente. Es la respuesta estándar a «cómo debería almacenar las contraseñas de los usuarios»: háshéalas con bcrypt, no con un SHA-256 plano.
Dos cosas hacen a bcrypt apto para ese trabajo. Primera, tiene un factor de costo ajustable que escala el trabajo de forma exponencial: subir el costo 1 duplica aproximadamente el tiempo por hash, así el hardware puede superarse girando un pomo. Segunda, incorpora una sal aleatoria en cada hash, de modo que las contraseñas idénticas se hashean a valores completamente distintos y una tabla precalculada construida para una base de datos es inútil contra otra. Tanto la sal como el costo van dentro de la cadena de salida, así la verificación no necesita nada más allá de la contraseña y el hash.
Esta página hace ambas operaciones: hashear una contraseña en una cadena bcrypt y verificar una contraseña contra un hash existente. Para mantener la página responsiva, el hash con costo 12 o superior se delega a un Web Worker, así el cómputo pesado nunca congela la interfaz.
Cómo usarlo#
- Elige un modo: Hash (produce una cadena bcrypt a partir de una contraseña) o Verificar (comprueba una contraseña contra un hash existente).
- Escribe la contraseña. Pulsa el icono del ojo para mostrarla mientras escribes; está enmascarada por defecto. Se admite UTF-8, incluidos emoji y escrituras no latinas.
- En modo Hash, ajusta el deslizador de Factor de costo (4–14, por defecto 12). Cuanto más alto, más lento y más fuerte. Aparece un aviso en cuanto el costo es lo bastante alto para tardar un tiempo apreciable.
- En modo Verificar, pega el hash existente en el campo que aparece. El costo se lee automáticamente del propio hash: no lo ajustas tú.
- Pulsa el botón principal. En modo Hash, la salida es la cadena bcrypt; en modo Verificar, la salida es un veredicto claro de coincide / no coincide, más una lectura del tiempo transcurrido que te ayuda a juzgar el costo en tu propio hardware.
Características principales#
- Costo ajustable, 4–14. El valor por defecto de 12 es la recomendación moderna; cada paso duplica aproximadamente el trabajo, así puedes seguir el ritmo del hardware más rápido con el paso de los años.
- Delegación a worker con costo alto. El costo 12 y superior se ejecuta en un Web Worker para que la página se mantenga responsiva; si los workers están bloqueados, recurre de forma transparente al hilo principal con el mismo resultado.
- Sal incorporada. Cada hash obtiene una sal aleatoria nueva codificada en la salida, así la misma contraseña nunca se hashea dos veces a la misma cadena.
- Verificación con costo automático. El factor de costo se extrae del hash que pegas, así no hay desajuste entre cómo se hasheó una contraseña y cómo se comprueba.
- Cero subidas. El hash y la verificación ocurren localmente; la contraseña nunca sale de la página.
Ejemplo detallado#
A continuación hay un hash real de hunter2 con costo 12, producido por esta misma página. Como la sal es aleatoria nueva, hashear hunter2 de nuevo te dará una cadena distinta, pero esta es genuina y verificable: pégala en modo Verificar, escribe hunter2, y el veredicto es coincide.
$2b$12$DG/IWIDBmJlywamLdGno2.guEH5lGnQ1OTULdIGN8BH1vqiLIGzjy
Leyéndolo campo a campo:
$2b$: la variante de bcrypt (bcryptjs emite$2b$; la verificación también acepta$2a$,$2x$,$2y$).12: el factor de costo, es decir,2^12rondas de expansión de clave.- los siguientes 22 caracteres: la sal aleatoria.
- los 31 caracteres finales: el hash derivado.
Cambia a Verificar, suelta el hash anterior en el campo de hash existente, escribe hunter2, y el veredicto es coincide. Escribe Hunter2 en su lugar y es no coincide: bcrypt distingue mayúsculas y minúsculas, y un solo carácter equivocado cambia el resultado. La cifra de tiempo transcurrito que se muestra al lado es el coste real de una verificación con costo 12 en tu máquina.
Preguntas frecuentes#
¿Qué costo debería elegir?#
12 es un valor por defecto sólido para sistemas nuevos hoy: tarda más o menos unos cientos de milisegundos en hardware típico, lo cual es indoloro para un inicio de sesión real pero doloroso para intentos masivos. Súbelo a 13 o 14 para objetivos de alto valor donde un inicio de sesión algo más lento sea aceptable. La regla clave es reajustarlo al alza con los años a medida que mejora el hardware, porque el costo de bcrypt escala de forma exponencial: cada incremento de 1 duplica aproximadamente el tiempo.
¿Por qué hashear la misma contraseña dos veces da resultados distintos?#
Porque bcrypt genera una sal aleatoria nueva cada vez y la incrusta en la salida. Los dos hashes no se parecen en nada, y aun así ambos verifican contra la misma contraseña. Esa es toda la gracia del salado: impide que un atacante reconozca contraseñas repetidas o reutilice una tabla precalculada.
¿Puedo verificar un hash generado en otro sitio?#
Sí, siempre que sea una cadena bcrypt bien formada ($2a$, $2b$, $2x$ o $2y$). Pégalo en el campo de hash existente en modo Verificar; la herramienta lee el costo y la sal del propio hash. Los hashes exportados desde bcrypt de Node, password_hash de PHP o passlib de Python funcionan todos aquí.
¿Es bcrypt mejor que SHA-256 para contraseñas?#
Para almacenar contraseñas de inicio de sesión, sí, enfáticamente. SHA-256 es rápido, que es justo la propiedad equivocada para un hash de contraseña almacenado: un atacante con el hash puede probar miles de millones de intentos por segundo en una GPU. bcrypt es deliberadamente lento y salado, que es lo que exige el almacenamiento de contraseñas. Usa SHA-256 para integridad y firmas; usa bcrypt (o sus primos Argon2/scrypt) para contraseñas humanas.