Cifrado y descifrado AES
Cifra un mensaje con contraseña y descífralo después, o trabaja con claves e IV en bruto para probar tu propio código. El cifrado se hace en tu dispositivo con la API Web Crypto.
Añade esta calculadora a tu web
Copia el código y pégalo en el HTML de tu página. Es gratis; mantén el enlace de crédito, por favor.
Qué hace el modo contraseña
Tu contraseña se convierte en una clave de 256 bits con PBKDF2-HMAC-SHA256 y 600 000 iteraciones (la recomendación de OWASP), usando una sal aleatoria de 16 bytes. El texto se cifra con AES-256-GCM con un nonce aleatorio de 12 bytes, y el resultado es sal + nonce + cifrado + etiqueta de 16 bytes, en Base64. Cifrar dos veces el mismo texto da resultados distintos, y es lo esperado.
Descifrarlo en otro lugar lleva pocas líneas, por ejemplo en Python con el paquete cryptography:
import base64
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
data = base64.b64decode(cifrado)
sal, nonce, cuerpo = data[:16], data[16:28], data[28:]
clave = PBKDF2HMAC(hashes.SHA256(), 32, sal, 600_000).derive(contrasena.encode())
print(AESGCM(clave).decrypt(nonce, cuerpo, None).decode())AES en pocas palabras
AES (FIPS 197) es el cifrado por bloques que el NIST estandarizó en 2001. Cifra bloques de 16 bytes con una clave de 128, 192 o 256 bits, y el modo decide cómo se encadenan: CBC necesita relleno y un IV aleatorio, CTR convierte AES en un cifrado de flujo y GCM añade una etiqueta de autenticación que detecta cualquier cambio. Si pierdes la contraseña o la clave, pierdes los datos: no hay forma de recuperarlos.
Preguntas frecuentes
¿Qué opción elijo?
Para tus propios mensajes, el modo contraseña por defecto (AES-256-GCM): está autenticado, así que detecta una contraseña errónea o un texto manipulado. Usa el formato OpenSSL/CryptoJS para intercambiar datos con código que use CryptoJS.AES u openssl enc, y la clave en bruto para coincidir con una implementación concreta.
¿Se puede descifrar aquí un texto que empieza por U2FsdGVkX1?
Sí, si conoces la contraseña. U2FsdGVkX1 es «Salted__» en Base64, la cabecera que escriben CryptoJS y OpenSSL. Se prueban automáticamente la derivación antigua con MD5 y la nueva con SHA-256.
¿Por qué no hay modo ECB?
Los navegadores no lo ofrecen porque es inseguro: bloques iguales de texto dan bloques iguales de cifrado y se filtran patrones. Usa CBC, CTR o, mejor, GCM.
¿Lo que pego se envía a un servidor?
No. Esta herramienta funciona por completo en tu navegador con JavaScript y la API Web Crypto integrada. Nada de lo que escribes, pegas o abres se sube ni se guarda.