Cómo cifrar y descifrar texto AES

Un cuadro de texto y un campo de contraseña: Cifrar convierte el texto claro en un criptograma AES que empieza por U2FsdGVkX1, y Descifrar devuelve ese criptograma como texto UTF-8. Ambos pasos se ejecutan dentro de la página: el recorrido completo sigue funcionando con la red desconectada.

La clave no se guarda en ningún sitio. Se deriva de la contraseña y de una sal aleatoria nueva en cada ejecución, y por eso el mismo texto con la misma contraseña produce una cadena distinta cada vez.

  1. Pega el texto que quieres cifrar, o un criptograma existente que empiece por U2FsdGVkX1, en el cuadro superior.
  2. Escribe la contraseña en el campo situado junto a los botones. Es el único secreto: hace falta la misma contraseña para volver a leer el resultado.
  3. Pulsa Cifrar o Descifrar. El resultado nuevo sustituye al anterior y, si la operación falla, la salida se vacía en lugar de dejar el texto antiguo en pantalla.
  4. Comprueba el resultado con una segunda herramienta cuando importe: openssl enc -d -aes-256-cbc -md md5 -a -pass pass:TU_CONTRASENA descifra un criptograma creado aquí.
  5. Pulsa Limpiar para vaciar el texto, la contraseña y el resultado antes de la siguiente prueba.

Qué es realmente la salida

El contenedor Salted__ y su sal aleatoria

El resultado es Base64 cuyos primeros bytes decodifican a Salted__, seguidos de ocho bytes de sal aleatoria y del criptograma. La clave y el IV se derivan de la contraseña y de esa sal con EVP_BytesToKey y MD5, el mismo esquema que openssl enc usa para cifrar con contraseña.

Como la sal es nueva en cada ejecución, la misma frase se cifra en una cadena distinta cada vez y ambas vuelven al mismo texto. Comprobado en los dos sentidos: openssl lee la salida de esta página y esta página lee la salida de openssl enc -aes-256-cbc -md md5.

Lo que la página no puede comprobar

El algoritmo es AES-256-CBC y el contenedor no lleva firma ni etiqueta de autenticación. Una contraseña equivocada, una cadena truncada y un byte editado acaban en el mismo aviso, y un criptograma editado puede salir como texto ilegible: en una prueba de seis cambios aleatorios de un carácter, cinco fallaron y uno devolvió basura sin avisar.

La derivación es una sola pasada de MD5 sobre la contraseña, sin el factor de trabajo que añaden PBKDF2 o Argon2. La contraseña es, por tanto, el punto débil: esta página sirve para reproducir y revisar datos AES existentes, no para proteger secretos nuevos.

Compatibilidad y límites

Entra texto y sale texto: aquí no se tratan archivos, datos binarios ni entradas en hexadecimal. Un criptograma solo se descifra si es este contenedor con sal y contraseña en modo CBC; la salida con -nosalt, con -K e -iv explícitos, con otro modo como ECB o de otra biblioteca falla con el mismo aviso.

200 KB de texto se cifran en unos 15 ms en Chrome; para varios megabytes conviene más una herramienta de línea de comandos local.

Herramientas recientes: