Generador y Verificador de Hash Bcrypt

Genera y verifica hashes de contraseña bcrypt en tu navegador. La salida es la cadena estándar $2[abxy]$rounds$<sal-22-caracteres><hash-31-caracteres> — compatible con PHP password_hash, Node bcrypt, Python bcrypt, Go golang.org/x/crypto/bcrypt y jBCrypt. Control deslizante de costo 4–14, sal aleatoria o escrita, modo masivo, copiar como TSV o JSON. Puro del lado del cliente, sin subir nada, sin rastreo.

ms

Tabla del factor de costo

El costo de bcrypt es 2N rondas de estiramiento de clave. Duplicar el costo duplica el tiempo por hash. El costo correcto es el más alto que mantenga la latencia de inicio de sesión por debajo de ~250 ms en un único hilo.

Costo Rondas (2N) ~ms en un portátil medio Benchmark local Recomendación
Cargando la tabla…

La columna "Benchmark local" ejecuta un único hash de costo N en tu navegador y reporta el tiempo. Recarga después de actualizar tu dispositivo si quieres un número nuevo.

Cómo funciona bcrypt

bcrypt es una función de hash de contraseñas diseñada por Niels Provos y David Mazières en 1999. Ha sido el caballo de batalla del almacenamiento de contraseñas en PHP, Node, Python, Ruby y Go durante dos décadas. Dos propiedades hacen que sobreviva a la era de las GPUs:

1. Sal
La sal de 16 bytes está codificada en el propio hash, de modo que dos usuarios con la misma contraseña obtienen cadenas almacenadas diferentes. Las tablas arcoíris precalculadas son inútiles.
2. Factor de trabajo
El costo N significa 2N iteraciones del cronograma de estiramiento de clave EksBlowfish. Un único hash de bcrypt al costo 12 tarda ~200 ms en un portátil y ~2 ms en una GPU — el factor de trabajo reduce la proporción de costo desde 1000× (SHA-256) hasta ~10×.
La cadena de salida
$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
Las cuatro partes: $2a$ = marcador del algoritmo, 10$ = costo, sal en base64 de 22 caracteres, hash en base64 de 31 caracteres. El total es siempre 60 caracteres.
Versiones: 2a, 2b, 2y
2a es la especificación original de 1999 y el objetivo con mayor compatibilidad.
2b corrigió un bug de 2011 en la implementación de referencia de OpenBSD que manejaba mal los caracteres de 8 bits; emitido por PHP y Node modernos.
2y es la misma corrección que 2b pero para la referencia Java de jBCrypt; emitido por Python y el paquete bcrypt de Go.
Lo que bcrypt no es
No es SHA-256, no es PBKDF2, no es Argon2, no es scrypt. Esos son algoritmos diferentes con envoltorios diferentes ($argon2id$…, $scrypt$…). La herramienta identificadora de hashes puede distinguirlos.