Cómo cifrar y descifrar texto con TripleDES

Esta página convierte texto en un bloque TripleDES en Base64 y ese bloque de vuelta en texto. Pega el contenido, escribe la contraseña, pulsa Cifrar o Descifrar y copia el resultado del panel que hay bajo los botones. El trabajo ocurre en el navegador y nada de lo que pegas se sube a ningún sitio.

El bloque es el contenedor que escribe CryptoJS: Base64 cuyos primeros bytes decodificados son los ocho caracteres Salted__, después ocho bytes de sal aleatoria y por último el texto cifrado. La línea de comandos de OpenSSL escribe esa misma forma para Triple DES, así que cada lado puede recibir la salida del otro.

  1. Pega el texto que quieres proteger en el campo superior, o pega un bloque en Base64 cuando quieras leerlo de vuelta.
  2. Escribe la contraseña en el campo de la clave. Las dos direcciones necesitan la misma contraseña, y una contraseña vacía se rechaza en lugar de convertirse en un bloque que nadie podrá abrir.
  3. Pulsa Cifrar para ir de texto a Base64, o Descifrar para el camino inverso. El resultado aparece en el panel bajo los botones; la línea de estado solo se llena cuando algo falla.
  4. Pulsa Copiar para llevar todo el resultado al portapapeles, o selecciónalo a mano. Limpiar vacía el campo, la contraseña y el resultado antes del siguiente documento.
  5. Guarda la contraseña junto al bloque. Sin ella el bloque queda cerrado: aquí no hay recuperación, ni reinicio, ni custodia de claves.

El contenedor con sal, OpenSSL y lo que significa un descifrado fallido

Qué contiene el resultado en Base64

Al decodificar el resultado aparecen tres partes: los caracteres ASCII Salted__, ocho bytes de sal del generador aleatorio del navegador y el propio texto cifrado, escrito en bloques de 8 bytes con relleno PKCS#7. Una entrada de 31 caracteres ocupa por tanto 48 bytes de cifrado, y una de un solo carácter ocupa ocho.

La sal es nueva en cada pulsación, así que el mismo texto con la misma contraseña produce cada vez una cadena Base64 distinta, y comparar dos ejecuciones a ojo no demuestra que las entradas coincidieran. La contraseña no es la clave: se estira con MD5 hasta una clave TripleDES de 24 bytes y un IV de 8 bytes, que es lo que hace la línea de comandos de OpenSSL con -md md5. El resultado se pliega en varias líneas igual que el de la consola, y se vuelve a leer con o sin esos saltos de línea.

OpenSSL lee esta salida y esta página lee OpenSSL

Medido con OpenSSL 1.1.1k: openssl enc -d -des-ede3-cbc -md md5 -a -k descifra un bloque de esta página, y un bloque creado con openssl enc -des-ede3-cbc -md md5 -a -k se descifra aquí. Al darle la sal de un bloque de la página, la consola imprimió la misma clave de 24 bytes y el mismo IV de 8 bytes que deriva esta página, y reprodujo ese bloque byte a byte.

La opción forma parte del formato y no es un detalle: un bloque escrito con -md sha256 o con -pbkdf2 se rechaza aquí, porque otra derivación produce otra clave. Tus datos no están corruptos, solo están cerrados con otra derivación: descífalos con la herramienta que los escribió o vuelve a cifrarlos con -md md5 mientras tengas la contraseña.

Cuando falla el descifrado, y para qué sirve todavía TripleDES

Una contraseña equivocada, un carácter editado en el Base64 y un texto corriente pegado como si fuera un bloque terminan igual: el resultado se vacía y un único mensaje enumera las tres causas posibles. El fallo no se puede atribuir a una de ellas, porque la comprobación del relleno falla antes de que se pueda juzgar la clave. La entrada vacía y la contraseña vacía tienen mensajes propios.

TripleDES es un cifrado heredado: tres claves DES sobre bloques de 8 bytes, retirado de los diseños nuevos y mantenido vivo por datos que ya están guardados con él. Usa esta página para leer esos datos o para escribir un valor compatible; para lo nuevo, usa AES. Y una ida y vuelta correcta solo demuestra que la contraseña coincidía: no dice quién escribió el bloque ni si se puede confiar en el texto plano.

Herramientas recientes: