El descifrado DES falla con "bad decrypt" o un error de relleno — ¿qué reviso?
El descifrado exige que cada parámetro coincida con el lado que cifró: los bytes de la clave, la longitud de clave (8/16/24), el modo (ECB/CBC), el IV, el relleno y si el texto cifrado está en hex o Base64. Las dos trampas más habituales: longitud de clave incorrecta (una "clave DES" de 32 caracteres hex son 16 bytes — eso es 3DES de 2 claves, no DES simple) y confusión de nombres de relleno (el PKCS5Padding de Java ES PKCS#7 para DES — no elija None). El panel plegable de la derecha muestra un comando OpenSSL equivalente para la configuración actual; enviarlo a la otra parte es la forma más rápida de encontrar la divergencia.
¿Cuánto mide una clave DES? ¿Y 3DES?
DES simple: 64 bits nominales (8 bytes, 56 efectivos — un bit por byte es un bit de paridad). 3DES viene en dos formas: 2 claves (16 bytes, K1‖K2 con K3=K1) y 3 claves (24 bytes, K1‖K2‖K3). El material de clave nominal es de 112/168 bits, pero la fuerza de seguridad efectiva según NIST (SP 800-57 Part 1 Rev.5, tabla 2) es de unos 80 y 112 bits — y la forma de 3 claves también está desaconsejada. Esta herramienta deduce la forma del número de bytes; cualquier cosa que no sea 8/16/24 lanza un error — CryptoJS y openssl enc -K truncan o rellenan con ceros en silencio, que es la causa número uno de fallos de interoperabilidad.
¿Qué es el IV y cuánto mide en DES?
El IV es el valor de 8 bytes que CBC mezcla en el primer bloque; ECB no usa ninguno. Debe medir exactamente 8 bytes (16 dígitos hex o 8 caracteres ASCII). Ojo: el IV de DES mide 8 bytes y el de AES 16 — copiar una longitud de IV de AES falla de inmediato. Nunca reutilice un IV con la misma clave.
¿A qué corresponde el DES/ECB/PKCS5Padding de Java en esta herramienta?
Modo ECB + relleno PKCS#7. En el JCE, "PKCS5Padding" para DES ejecuta el algoritmo genérico PKCS#7 — PKCS#5 solo definió relleno para bloques de 8 bytes, que son precisamente los de DES. La salida de Cipher.getInstance("DES/ECB/PKCS5Padding") en Java se descifra aquí con ECB + PKCS#7 y una clave DES simple de 8 bytes. ⚠️ El 3DES de Java (DESede) solo acepta claves de 24 bytes — para la forma de 2 claves debe expandir K1‖K2 a K1‖K2‖K1 usted mismo.
¿Cómo se corresponden los nombres de algoritmo des-ede3 de PHP?
PHP toma prestados los nombres de OpenSSL: des-ede3-cbc es 3DES de 3 claves + CBC, des-ede3-ecb es 3 claves + ECB; des-ede-cbc es la forma de 2 claves. Una clave de 24 bytes selecciona 3 claves, 16 bytes selecciona 2 claves.
¿Qué son los bits de paridad de una clave DES? ¿Se comprueban?
El bit bajo de cada byte de la clave se define como bit de paridad, de modo que la verdadera clave de 56 bits cabe dentro de 64 bits. FIPS 46-3 no exige comprobarla — OpenSSL, Java y esta herramienta la ignoran; funcionan cualesquiera 8 bytes, y cambiar los bits de paridad no altera el texto cifrado. .NET es la excepción: primero normaliza la paridad y después consulta una tabla de claves débiles, así que las claves cero y demás claves débiles son rechazadas por .NET mientras que todas las demás bibliotecas cifran sin queja — una trampa que solo se dispara al migrar claves de prueba de Java/OpenSSL a .NET.
¿Qué ocurre en 3DES cuando K1 = K2?
En el 3DES de 2 claves, K3 siempre es igual a K1; si además K1 = K2, toda la cadena EDE colapsa en DES simple: E_K(D_K(E_K(P))) = E_K(P). Lo mismo ocurre cuando los tres componentes de 8 bytes de una clave de 24 bytes son idénticos. Esta herramienta cifra igualmente (primero la interoperabilidad), pero la fuerza real es entonces la de DES simple, 56 bits, no la de 3DES.
¿Sigue siendo seguro DES?
No — solo sirve para interoperar con sistemas heredados. NIST retiró el DES simple el 2005-05-19 (una clave de 56 bits se rompe por fuerza bruta; el Deep Crack de EFF lo hizo en 56 horas en 1998 y 22 horas al año siguiente con distributed.net). La SP 800-131A Rev.2 clasifica el cifrado TDEA de 2 claves como Disallowed y el de 3 claves como Disallowed después del 2023-12-31 (el descifrado permanece como "Legacy use", reservado solo para leer datos históricos); la propia SP 800-67 se retiró el 2024-01-01. El bloque pequeño de 64 bits también arrastra el límite de cumpleaños tipo Sweet32 (CVE-2016-2183) — NIST limita un mismo juego de claves a 2²⁰ bloques (≈8 MB) de texto claro. Use AES-256 para cualquier cosa nueva. Esta herramienta existe porque las cámaras de compensación bancarias, las pasarelas de pago y los viejos sistemas Java/.NET siguen procesando mensajes de la era DES — arreglarlos empieza por poder leerlos.
¿Por qué mi resultado 3DES difiere de Java/PHP?
Revise por orden de probabilidad: ① longitud de clave — la "clave DES de 32 hex" del otro lado son 16 bytes (3DES de 2 claves), y usted descifró como DES simple; ② modo — el "DES" desnudo de Java usa ECB por defecto, los nombres de OpenSSL sin sufijo de modo, des-ede3/des-ede, son ECB (el alias de CBC es -des3); el openssl_encrypt de PHP exige el nombre de algoritmo explícito — lo confuso es que por defecto devuelve texto Base64, no bytes crudos; ③ relleno — el viejo mcrypt de PHP solía usar Zero, el JCE usa PKCS#5/#7; ④ codificación — hex frente a Base64, y las mayúsculas/minúsculas; ⑤ la trampa de la contraseña en CryptoJS — pasar una cadena como "clave" dispara una derivación de clave (MD5 + sal aleatoria, salida con prefijo Salted__, distinta cada vez), que no es la clave bruta en absoluto — la causa principal de "el mismo código, un resultado distinto en cada ejecución". Esta herramienta permite alternar cada punto; el comando OpenSSL equivalente de la derecha puede enviarse a la otra parte para reproducirlo.
¿ECB o CBC — cuál debo usar?
Lo que exija el sistema con el que dialoga — en interoperabilidad heredada no hay voto. Si de verdad puede elegir, siempre CBC con un IV aleatorio: ECB convierte bloques de texto claro iguales en bloques cifrados iguales, y los bloques pequeños de 8 bytes de DES dejan ver los patrones aún más que en AES-ECB. Los protocolos bancarios de la era DES usan ambos; consulte primero el documento del protocolo.
¿Funciona sin conexión? ¿Se suben mis datos?
Todo el cálculo ocurre en su navegador (TypeScript puro, cero dependencias, cero peticiones de red); las claves y el texto claro nunca salen del dispositivo. Una vez cargada la página puede desconectarse y seguir trabajando. Es la única forma aceptable para una herramienta que maneja claves.
¿3DES de 2 o de 3 claves — cuál es más común en sistemas heredados?
2 claves (16 bytes) es lo más común: bancos y la industria de pagos desplegaron hardware con claves de 16 bytes por compatibilidad, y la SP 800-67 le mantuvo una fecha de obsolescencia aparte (anterior). Así que una "clave 3DES" de 32 caracteres hex es muy probablemente la forma de 2 claves. Esta herramienta detecta la forma automáticamente a partir del número de bytes.