Generador de hash PBKDF2
Convierte una contraseña y una sal en una clave derivada con PBKDF2 usando la función hash, el número de iteraciones y la longitud de clave que elijas. Los resultados aparecen en hex y Base64 junto con cadenas codificadas listas para usar, los primeros pasos del cálculo y el código equivalente en Python y Node.js. La clave la calcula la API Web Crypto de tu navegador y nunca sale de la página.
Última actualización:
Pasos del cálculo
Cadenas de hash codificadas
Código para reproducir esta clave
Cómo usar Generador de hash PBKDF2
- Introduce la contraseña como texto plano (codificado en UTF-8) o cambia a Hex para bytes sin procesar.
- Define la sal: conserva la sal aleatoria de 16 bytes, pulsa Nueva sal aleatoria o escribe la tuya como texto, hex o Base64.
- Elige el hash, las iteraciones y la longitud de la clave, o elige una plantilla como OWASP SHA-256 (600,000 iteraciones) o Wi-Fi WPA2 (SHA-1, 4,096 iteraciones, 32 bytes).
- Pulsa Generar clave (también se actualiza mientras escribes) y copia el hex, el Base64 o la cadena codificada que necesites.
- Para verificar un valor guardado, pégalo en Clave esperada: la herramienta te dirá si coincide.
- Abre los paneles de pasos y de código para ver cómo se construyó la clave y reproducirla en Python o Node.js.
Cómo funciona PBKDF2
PBKDF2 se especifica en la RFC 8018 (PKCS #5 v2.1). Toma una contraseña P, una sal S, un número de iteraciones c y una longitud de clave deseada dkLen, y usa HMAC con una función hash como función pseudoaleatoria (PRF). Con hLen = el tamaño de salida del hash:
- Dividir la salida en bloques: l = ⌈dkLen ÷ hLen⌉. Una clave de 32 bytes con HMAC-SHA256 necesita un bloque; una clave de 64 bytes con HMAC-SHA256 necesita dos.
- Primera ronda de cada bloque: U1 = HMAC(P, S ‖ INT(i)), donde INT(i) es el número de bloque i como entero big-endian de 4 bytes (00000001 para el primer bloque).
- Iterar: Uj = HMAC(P, Uj−1) para j = 2 … c.
- Combinar: Ti = U1 ⊕ U2 ⊕ … ⊕ Uc (XOR bit a bit de todas las rondas).
- Salida: DK = T1 ‖ T2 ‖ … ‖ Tl, recortada a los primeros dkLen bytes.
El costo total es de c × l llamadas a HMAC (cada HMAC son dos compresiones de hash o más). Como la contraseña es la clave HMAC en cada ronda, un atacante que quiera probar un intento también debe repetir las c rondas. La sal hace que el trabajo de cada usuario sea único, así que una sola tabla precalculada no puede cubrir muchas cuentas.
Ajustes recomendados
| Hash (PRF) | Tamaño de salida (hLen) | Iteraciones de OWASP (2023) | Longitud de clave natural |
|---|---|---|---|
| HMAC-SHA1 | 20 bytes (160 bits) | 1,300,000 | 20 bytes |
| HMAC-SHA256 | 32 bytes (256 bits) | 600,000 | 32 bytes |
| HMAC-SHA512 | 64 bytes (512 bits) | 210,000 | 64 bytes |
Las cifras proceden de la Password Storage Cheat Sheet de OWASP revisada en 2023 y están pensadas para aumentarse a medida que el hardware se vuelve más rápido. NIST SP 800-132 (2010) fija 1,000 iteraciones como mínimo y pide una sal aleatoria de al menos 128 bits. Mantén la longitud de la clave igual o inferior al tamaño de salida del hash cuando guardes hashes de contraseñas; para claves de cifrado, deriva exactamente lo que necesita el cifrado (32 bytes para AES-256).
Vectores de prueba para verificar una implementación
| Fuente | Entradas | Clave derivada (hex) |
|---|---|---|
| RFC 6070 | HMAC-SHA1, P = “password”, S = “salt”, c = 1, dkLen = 20 | 0c60c80f961f0e71f3a9b524af6012062fe037a6 |
| RFC 6070 | HMAC-SHA1, P = “password”, S = “salt”, c = 4096, dkLen = 20 | 4b007901b765489abead49d926f721d065a429c1 |
| Vector común de SHA-256 | HMAC-SHA256, P = “password”, S = “salt”, c = 1, dkLen = 32 | 120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b |
| Vector común de SHA-256 | HMAC-SHA256, P = “password”, S = “salt”, c = 4096, dkLen = 32 | c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134a |
| IEEE 802.11i (WPA2) | HMAC-SHA1, frase de contraseña “password”, SSID “IEEE”, c = 4096, dkLen = 32 | f42c6fc52df0ebef9ebb4b90b38a5f902e83fe1b135a70e23aed762e9710a12e |
Si tu código no coincide con estos valores, los culpables habituales son: la sal escrita como texto cuando el sistema espera bytes hex (o al revés), un salto de línea al final de la contraseña, una codificación de texto distinta de UTF-8 o comparar una cadena hex con una Base64.
Dónde se usa PBKDF2
- Almacenamiento de contraseñas: el hasher predeterminado de Django (pbkdf2_sha256), Werkzeug/Flask, passlib y muchos sistemas validados según FIPS.
- Wi-Fi: WPA2-Personal convierte tu frase de contraseña en la clave precompartida de 256 bits con PBKDF2-HMAC-SHA1, 4,096 iteraciones y el nombre de la red como sal.
- Archivos cifrados y bóvedas: los archivos comprimidos protegidos con contraseña, el cifrado de disco y los gestores de contraseñas derivan su clave de cifrado a partir de la contraseña maestra con PBKDF2 o una función más reciente.
- Navegadores: la API Web Crypto ofrece PBKDF2 de forma nativa, que es lo que usa esta página.
Para almacenar contraseñas nuevas sin restricciones de cumplimiento normativo, una función de memoria intensiva como Argon2id o bcrypt resiste mejor el cracking con GPU que PBKDF2 con el mismo costo de tiempo.
Preguntas frecuentes
¿Qué es PBKDF2?
PBKDF2 (Password-Based Key Derivation Function 2) está definida en PKCS #5, ahora RFC 8018. Convierte una contraseña y una sal en una clave de cualquier longitud ejecutando miles de veces una función pseudoaleatoria, normalmente HMAC con SHA-1, SHA-256 o SHA-512. La repetición hace que cada intento de adivinar una contraseña sea lento para un atacante.
¿Cómo se calcula una clave PBKDF2?
La salida se divide en bloques del tamaño del hash. Para el bloque i, U1 = HMAC(P, S ‖ INT(i)), donde INT(i) es i como número big-endian de 4 bytes; después U2 = HMAC(P, U1) y así sucesivamente hasta Uc. El bloque es T_i = U1 ⊕ U2 ⊕ … ⊕ Uc. Los bloques se concatenan y se recortan a la longitud de clave solicitada.
¿Cuántas iteraciones debo usar?
La Password Storage Cheat Sheet de OWASP (2023) recomienda 600,000 iteraciones para PBKDF2-HMAC-SHA256, 210,000 para PBKDF2-HMAC-SHA512 y 1,300,000 para PBKDF2-HMAC-SHA1. NIST SP 800-132 fija 1,000 como mínimo absoluto. Elige el número más alto que tu servidor pueda permitirse y auméntalo con el tiempo.
¿Qué longitud debe tener la sal?
NIST SP 800-132 pide una sal de al menos 128 bits (16 bytes) procedente de un generador aleatorio seguro, única para cada contraseña. La sal no es secreta: se guarda junto al hash para poder derivar de nuevo la misma clave al iniciar sesión.
¿Por qué la longitud de la clave no debe superar el tamaño de salida del hash en contraseñas?
Si pides más bytes de los que produce el hash (por ejemplo, 64 bytes con SHA-256), PBKDF2 vuelve a ejecutar todo el bucle de iteraciones para cada bloque adicional, pero a un atacante le basta el primer bloque para probar un intento. Tu servidor hace el doble de trabajo sin ganar seguridad. Usa SHA-512 si necesitas 64 bytes.
¿PBKDF2 sigue siendo seguro frente a bcrypt o Argon2?
PBKDF2 sigue estando aprobado por el NIST y es obligatorio para el cumplimiento de FIPS-140, pero necesita muy poca memoria, así que las GPU y el hardware especializado pueden probar intentos en paralelo a bajo costo. Para almacenar contraseñas nuevas, OWASP prefiere Argon2id, y después scrypt o bcrypt; usa PBKDF2 con un número alto de iteraciones cuando lo exijan el cumplimiento normativo o la compatibilidad.
¿Se envía mi contraseña a un servidor?
No. La clave se deriva con crypto.subtle.deriveBits en tu propio navegador. La contraseña, la sal y el resultado no se suben, no se registran ni se guardan.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.