Herramienta de Cifrado AES — GCM, CBC y CTR
Cifrado AES online y gratuito — AES-128/192/256, GCM/CBC/CTR, frase de contraseña (PBKDF2) o clave sin procesar. Se ejecuta 100 % en tu navegador; nada se sube a un servidor.
Opciones avanzadas
Nunca reutilices un IV con la misma clave. Déjalo en blanco para generar un IV aleatorio seguro.
¿Qué es el cifrado AES?
AES (el Advanced Encryption Standard, o Estándar de Cifrado Avanzado) es un cifrado de bloque simétrico estandarizado por el NIST en FIPS 197 en 2001, basado en el diseño Rijndael de Joan Daemen y Vincent Rijmen. Cifra los datos en bloques fijos de 128 bits usando una clave de 128, 192 o 256 bits, y la misma clave cifra y descifra. Es el caballo de batalla de la criptografía moderna, y protege desde el tráfico HTTPS hasta el cifrado de disco.
Un cifrado de bloque puro solo revuelve un bloque de 16 bytes, así que AES siempre se ejecuta dentro de un modo de operación que encadena los bloques entre sí. Esta herramienta ofrece tres, todos proporcionados de forma nativa por la API Web Crypto del navegador: GCM, CBC y CTR. GCM (Galois/Counter Mode, NIST SP 800-38D) es el valor por defecto recomendado porque está autenticado — produce una etiqueta de autenticación de 128 bits junto con el texto cifrado, así que cualquier manipulación se detecta al descifrar. CBC y CTR solo proporcionan confidencialidad; por sí solos no pueden decirte si el texto cifrado fue alterado, razón por la cual TLS 1.3 (RFC 8446) eliminó todas las suites de cifrado CBC en favor de modos autenticados como GCM.
Notarás que aquí no hay modo ECB, y eso es deliberado. ECB cifra cada bloque de texto plano idéntico al mismo bloque de texto cifrado, así que la estructura a gran escala se filtra directamente — la famosa imagen del 'pingüino ECB' sigue siendo visiblemente un pingüino después del cifrado. La API Web Crypto omite ECB exactamente por esta razón (solo implementa AES-CBC, AES-CTR y AES-GCM), y nosotros también. Si necesitas interoperar con un sistema heredado que usó ECB, trátalo como una razón para migrarlo, no para reproducir la debilidad.
Como la mayoría de la gente escribe una frase de contraseña en lugar de una clave aleatoria de 32 bytes, la herramienta deriva la clave AES a partir de tu frase de contraseña con PBKDF2-HMAC-SHA256 a 600.000 iteraciones y una sal aleatoria de 16 bytes, siguiendo la guía actual de OWASP sobre almacenamiento de contraseñas (y la NIST SP 800-132, que exige una sal de al menos 128 bits). Eso hace lenta la fuerza bruta contra una frase de contraseña débil, pero no es magia: esta es una herramienta para aprender modos, depurar texto cifrado y datos personales puntuales — no para proteger secretos de producción, que pertenecen a un sistema de gestión de claves dedicado. Para una frase de contraseña fuerte, genera una con nuestro generador de contraseñas aleatorias; para una clave verdaderamente aleatoria, usa el generador de clave secreta.
// AES-256-GCM with a passphrase (PBKDF2-HMAC-SHA256, 600,000 iterations).
// Identical code runs in the browser and in Node.js 20+ via Web Crypto.
async function aesGcmEncrypt(plaintext, passphrase) {
const enc = new TextEncoder();
const salt = crypto.getRandomValues(new Uint8Array(16));
const iv = crypto.getRandomValues(new Uint8Array(12));
const baseKey = await crypto.subtle.importKey(
'raw', enc.encode(passphrase), 'PBKDF2', false, ['deriveKey']);
const key = await crypto.subtle.deriveKey(
{ name: 'PBKDF2', salt, iterations: 600000, hash: 'SHA-256' },
baseKey, { name: 'AES-GCM', length: 256 }, false, ['encrypt']);
const ct = new Uint8Array(await crypto.subtle.encrypt(
{ name: 'AES-GCM', iv }, key, enc.encode(plaintext)));
const packed = new Uint8Array([...salt, ...iv, ...ct]); // salt(16) | iv(12) | ct+tag
return btoa(String.fromCharCode(...packed)); // self-contained Base64
} Características principales
Cifrado autenticado GCM por defecto
GCM produce el texto cifrado más una etiqueta de autenticación de 128 bits, así que el descifrado falla de forma ruidosa si se cambió un solo byte. CBC y CTR están a un clic de distancia para cuando necesites interoperar con ellos.
Texto cifrado autocontenido
El modo de frase de contraseña empaqueta la sal aleatoria, el IV y la etiqueta en una sola cadena Base64, así que quien descifre solo necesita la frase de contraseña — no hay campos separados que copiar ni perder.
Frase de contraseña o clave sin procesar
Escribe una frase de contraseña (estirada con PBKDF2-HMAC-SHA256, 600.000 iteraciones) o pega una clave exacta de 128/192/256 bits en hex o Base64, con una insignia de recuento de bytes en vivo que confirma la longitud.
Salida compatible con OpenSSL
Activa el modo OpenSSL para emitir el formato Salted__ que leen el comando enc de OpenSSL y CryptoJS, con el comando de CLI equivalente mostrado en vivo para que puedas reproducirlo en una terminal.
100 % en tu navegador
Cada byte se cifra localmente con la API Web Crypto. Abre tu pestaña Red y verás que nada sale de la página — incluso funciona sin conexión.
Salida en Base64 o Hex
Copia el resultado en la codificación que espere tu sistema de destino, e inspecciona las longitudes de la sal, el IV, el texto cifrado y la etiqueta en la franja de desglose de segmentos.
Ejemplos de cifrado AES
GCM + frase de contraseña (autocontenida, no determinista)
El rápido zorro marrón salta sobre el perro perezoso.
sal (16 B) + IV (12 B) + texto cifrado + etiqueta (16 B), codificado en Base64 — un valor nuevo en cada ejecución
Con Modo GCM, Tamaño de clave 256, Tipo de clave Frase de contraseña y la frase de contraseña hunter2, esta frase se cifra en una única cadena Base64 autocontenida. Cífrala dos veces y obtendrás dos salidas completamente distintas — eso es intencionado. El modo de frase de contraseña genera una sal nueva de 16 bytes y un IV nuevo de 12 bytes en cada cifrado, así que un mismo texto plano nunca produce el mismo texto cifrado y un observador no puede saber que dos mensajes son iguales. La franja de segmentos bajo la salida muestra el diseño exacto: la sal, luego el IV, luego el texto cifrado con su etiqueta GCM de 128 bits añadida al final. Para descifrar, el destinatario solo necesita la frase de contraseña y el mismo modo y tamaño de clave — la sal, el IV y la etiqueta viajan todos dentro de la cadena.
Salida compatible con OpenSSL (CBC + frase de contraseña)
Attack at dawn!
U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=
Activa el modo compatible con OpenSSL con Modo CBC, Tipo de clave Frase de contraseña, la frase de contraseña correct-horse, KDF PBKDF2 y 10.000 iteraciones. La herramienta emite entonces el formato OpenSSL Salted__: Base64 que siempre empieza por U2FsdGVkX1, que es la codificación Base64 de la cabecera Salted__ de 8 bytes. Como se genera una sal aleatoria nueva de 8 bytes cada vez, la cadena exacta cambia en cada ejecución, pero todas se descifran en la línea de comandos con: echo 'U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -pass pass:correct-horse -base64 -A — que imprime Attack at dawn!. Elige EVP-MD5 en lugar de PBKDF2 para igualar CryptoJS u OpenSSL 1.0.2 y anteriores. Ten en cuenta que openssl enc no admite GCM, así que el modo OpenSSL es solo CBC.
Cómo cifrar texto con AES
- 1
Elige un modo y un tamaño de clave
Deja el Modo en GCM (recomendado) y el Tamaño de clave en 256 para el valor por defecto más fuerte y sensato. Cambia a CBC o CTR solo si un sistema con el que necesitas interoperar lo exige.
- 2
Elige frase de contraseña o clave sin procesar
Deja el Tipo de clave en Frase de contraseña e introduce una frase de contraseña fuerte, o cambia a Clave sin procesar y pega una clave exacta de 128/192/256 bits en hex o Base64. La insignia de recuento de bytes confirma si tu clave sin procesar tiene una longitud válida.
- 3
Introduce el texto a cifrar
Escribe o pega tu texto plano. El cifrado se ejecuta automáticamente mientras escribes, enteramente en tu navegador — sin ida y vuelta con botones y sin subida a ningún servidor.
- 4
Copia el texto cifrado autocontenido
El resultado en Base64 a la derecha ya contiene la sal, el IV y la etiqueta de autenticación. Usa la franja de segmentos para ver el diseño de bytes y luego haz clic en Copiar. Cambia la codificación de salida a Hex si el sistema de destino lo espera así.
- 5
Descífralo de vuelta cuando lo necesites
Entrega el texto cifrado, la frase de contraseña y el mismo modo y tamaño de clave al destinatario, o abre la página de descifrado AES para revertirlo tú mismo.
Errores comunes de cifrado AES
Confundir una frase de contraseña con una clave sin procesar
Una clave sin procesar debe tener exactamente 16, 24 o 32 bytes de datos aleatorios (introducidos en hex o Base64); una frase de contraseña es cualquier texto y primero debe estirarse mediante una KDF. Seleccionar Clave sin procesar y pegar una frase de contraseña humana o bien da un error de longitud o produce una clave débil.
Key type: Raw key Key (hex): correct horse battery staple (not hex, not 32 bytes)
Key type: Passphrase Passphrase: correct horse battery staple (stretched with PBKDF2)
Reutilizar un IV con la misma clave
El IV debe ser único por mensaje bajo una clave dada. Reutilizarlo es fatal para GCM (puede filtrar la clave de autenticación) y rompe la confidencialidad para CBC y CTR. Deja que la herramienta genere un IV aleatorio nuevo cada vez.
// same key, same IV for two messages encrypt(key, iv, a); encrypt(key, iv, b);
// fresh random IV each time (the default) encrypt(key, randomIV(), a);
Perder la sal, el IV o la etiqueta
Si copias solo los bytes del texto cifrado y descartas la sal/IV antepuestos — o la etiqueta GCM añadida al final — los datos nunca podrán descifrarse. Conserva toda la cadena autocontenida, no solo la parte central.
stored = ciphertext // salt + IV + tag thrown away
stored = salt + iv + ciphertext + tag // the full Base64 string
Esperar que la salida de GCM coincida en cada ejecución
GCM (y en general el modo de frase de contraseña) usa una sal y un IV aleatorios, así que el mismo texto se cifra en una cadena Base64 distinta cada vez. Eso es una característica de seguridad, no un fallo — significa que un espía no puede saber que dos textos cifrados corresponden al mismo mensaje.
assert(encrypt(msg) === encrypt(msg)) // fails — and should
assert(decrypt(encrypt(msg)) === msg) // this is what must hold
Qué puedes hacer con el cifrado AES
- Aprende cómo se comportan los modos de AES
- Alterna entre GCM, CBC y CTR con la misma entrada para ver cómo cambian la autenticación, la longitud del IV y el tamaño del texto cifrado. Una forma práctica de entender lo que realmente especifica la NIST SP 800-38D.
- Produce texto cifrado que otro sistema pueda leer
- Genera una salida en el formato OpenSSL Salted__ (o como una clave sin procesar más un IV) para que un backend, un script o un compañero que use openssl o una biblioteca criptográfica pueda descifrarla sin fricción.
- Cifra una nota corta o un fragmento
- Protege un texto personal puntual — una frase de recuperación que estás moviendo entre dispositivos, un fragmento en un ticket de soporte — con una frase de contraseña que solo tú conoces. No para secretos regulados o de producción.
- Prototipa un formato de cifrado
- Define aquí el diseño de tu sal/IV/etiqueta y los ajustes de KDF antes de escribir el código, usando el desglose de segmentos para confirmar el orden y las longitudes de los bytes.
- Genera vectores de prueba
- Crea texto cifrado conocido con una frase de contraseña y un modo fijos para alimentar tus propias pruebas de descifrado, y luego verifica el ciclo completo en la página de descifrado AES.
Modos de AES y derivación de clave
- GCM (modo Galois/Counter) — autenticado, recomendado
- Confidencialidad más una etiqueta de autenticación de 128 bits (NIST SP 800-38D). Usa un IV de 96 bits (12 bytes), generado aleatoriamente en cada cifrado, y tanto el cifrado como el descifrado se paralelizan bien. La única regla que nunca debes romper: nunca reutilices un IV con la misma clave. La SP 800-38D limita una sola clave a unos 2^32 IV generados aleatoriamente, y una repetición filtra el XOR de dos textos planos e incluso puede exponer la clave de autenticación que protege la etiqueta. Ideal para casi todo.
- CBC (encadenamiento de bloques de cifrado) — solo confidencialidad
- Cada bloque se combina con XOR con el bloque de texto cifrado anterior, usando un IV aleatorio de 16 bytes. No tiene autenticación integrada, así que debe combinarse con un MAC separado — cifrar-y-luego-MAC, por ejemplo con nuestro generador HMAC — y es históricamente propenso a ataques de oráculo de relleno (Vaudenay, EUROCRYPT 2002). Se ofrece aquí para interoperabilidad con OpenSSL y sistemas más antiguos.
- CTR (contador) — solo confidencialidad, tipo flujo
- Convierte AES en un cifrado de flujo cifrando un contador, así que cualquier longitud en bytes funciona sin relleno y los bloques se paralelizan libremente. Como CBC, no proporciona integridad por sí solo, y reutilizar el contador/IV bajo una misma clave es catastrófico. Útil cuando necesitas acceso aleatorio o semántica de flujo.
- ECB — no disponible (por diseño)
- Electronic Codebook cifra cada bloque de forma independiente, así que los bloques de texto plano idénticos producen texto cifrado idéntico y los patrones se filtran — el famoso 'pingüino ECB'. La API Web Crypto deliberadamente no lo implementa, y nosotros tampoco. Si un sistema heredado exige ECB, trátalo como un fallo que corregir en lugar de un formato que reproducir.
- Derivación de clave: 600.000 frente a 10.000 frente a 1 iteración
- En el modo de frase de contraseña por defecto, esta herramienta usa PBKDF2-HMAC-SHA256 a 600.000 iteraciones (el mismo hash SHA-256 aplicado cientos de miles de veces) con una sal de 16 bytes, según OWASP. En el modo compatible con OpenSSL, PBKDF2 usa por defecto solo 10.000 iteraciones (el valor por defecto de openssl enc), y la KDF heredada EVP_BytesToKey que usan CryptoJS y OpenSSL antiguo ejecuta una única pasada de MD5 — órdenes de magnitud más débil. Más iteraciones significan una fuerza bruta más lenta por intento, razón por la cual el valor por defecto moderno es mucho más alto. Argon2 y scrypt son aún más fuertes pero no forman parte de Web Crypto, así que quedan fuera del alcance aquí; para el almacenamiento de contraseñas, sigue OWASP y prefiere Argon2id.
Buenas prácticas de cifrado AES
- Prefiere GCM a menos que un sistema par exija lo contrario
- El cifrado autenticado detecta manipulaciones que CBC y CTR dejan pasar en silencio. Baja a CBC o CTR solo por interoperabilidad, y añade un MAC si lo haces.
- Usa un IV aleatorio nuevo para cada mensaje
- La herramienta hace esto automáticamente. Si anulas el IV manualmente, nunca reutilices uno con la misma clave — para GCM una repetición es catastrófica, y para CBC rompe la seguridad semántica.
- Elige frases de contraseña fuertes y claves realmente aleatorias
- PBKDF2 ralentiza la fuerza bruta pero no puede rescatar una frase de contraseña débil. Genera una frase de contraseña larga con el generador de contraseñas, o una clave verdaderamente aleatoria con el generador de clave secreta.
- Conserva la sal, el IV y la etiqueta junto con el texto cifrado
- No son secretos, pero el descifrado falla sin ellos. El formato autocontenido de esta herramienta los agrupa a los tres; si usas el modo de texto cifrado puro con clave sin procesar, copia el IV por separado y guárdalo junto con el texto cifrado.
- No cifres secretos de producción o regulados en ninguna herramienta en línea
- Aunque sea completamente del lado del cliente, una herramienta de navegador es para aprender, depurar y casos personales puntuales. Los secretos reales pertenecen a un sistema de gestión de claves verificado con manejo y rotación de claves auditados. AES-256 en sí es fuerte — aprobado en la suite CNSA 2.0 de la NSA para información hasta el nivel TOP SECRET — y las rupturas del mundo real provienen de errores de implementación, no del cifrado.
Preguntas frecuentes sobre cifrado AES
¿Es seguro cifrar texto en línea?
¿Se puede descifrar AES sin la clave?
GCM frente a CBC — ¿qué modo debería usar?
AES-128 frente a AES-256 — ¿merece la pena el 256?
¿Se sube mi información al cifrar aquí?
¿Cuál es la diferencia entre una frase de contraseña y una clave?
¿Puedo cifrar de forma que OpenSSL o CryptoJS puedan descifrarlo?
Herramientas relacionadas
Ver todas las herramientas →Descifrado AES — Compatible con OpenSSL y CryptoJS
Herramientas de Seguridad
Descifra AES en línea — GCM/CBC/CTR, frase de contraseña o clave sin procesar, detecta automáticamente el formato "U2FsdGVkX1" de OpenSSL y CryptoJS. 100 % en el navegador, las claves nunca salen de la página.
Generador y verificador de hash bcrypt
Herramientas de Seguridad
Genera y verifica hashes bcrypt de contraseñas online — coste ajustable, prefijos $2b$/$2a$/$2y$. 100 % en tu navegador; tu contraseña nunca se sube.
Generador HMAC y verificador de firmas
Herramientas de Seguridad
Generador y verificador HMAC en línea gratis. Calcula HMAC-SHA256/SHA1/SHA384/SHA512 con claves en texto, hex o Base64 y salida Hex/Base64/Base64URL. 100 % en tu navegador: las claves nunca salen de la página.
Decodificador JWT
Herramientas de Seguridad
Decodifica tokens JWT online con nuestro decodificador JWT gratis. Inspecciona encabezado, carga útil, firma, expiración y reclamaciones al instante. 100% navegador — tu token nunca sale del dispositivo. Sin registro ni rastreo.
Codificador y Generador JWT
Herramientas de Seguridad
Generador y codificador JWT gratis online. Construye el encabezado y la carga útil, firma con HS256, RS256 o ES256 al instante. 100% en el navegador — tu secreto y tu clave nunca salen de tu dispositivo.
Generador de secreto JWT — HS256/384/512
Herramientas de Seguridad
Genera un secreto JWT fuerte y conforme a la RFC para HS256/384/512 — 100 % en tu navegador, nunca enviado a un servidor. base64url, base64 o hex para .env.