Cifragem / decifragem AES

Cifre ou decifre com AES-128, AES-192 ou AES-256 (FIPS 197) em modo GCM (cifragem autenticada), CBC, CTR ou ECB. As chaves são bytes em bruto em hexadecimal ou Base64, ou derivadas de uma palavra-passe com PBKDF2-HMAC-SHA256. O GCM aceita AAD e apresenta a tag de autenticação separadamente; as saídas CBC, CTR e ECB são compatíveis com o enc do OpenSSL. Para hashes, veja o gerador de hash; para MAC com chave, o gerador HMAC; para cifras antigas, a página Cifras antigas desta família.
Funciona inteiramente localmente: as chaves e os textos limpos nunca saem do seu separador. Ficheiros até 200 MB.
Tudo o que aqui escrever fica neste separador — mas isso não equivale a « seguro para segredos de produção ». A memória do navegador, as extensões e quem estiver a espreitar veem o que cola. Use esta página para aprender, verificar e testar a interoperabilidade, não para tratar dados reais de clientes.
Sentido: Modo: Saída:
GCM = AES-GCM com um nonce de 12 bytes e uma tag de autenticação de 128 bits (AEAD: confidencialidade + integridade). Predefinição quando o objetivo é a segurança.
O hexadecimal aceita espaços, dois-pontos e prefixos 0x.
Nunca reutilize um nonce com a mesma chave em GCM ou CTR.
Comprimento da tag:
As linhas de parâmetros registam a leitura exata da chave, o IV, o tamanho do AAD e a tag, para que um resultado copiado e colado possa ser sempre reproduzido noutra máquina.
Qual o modo a escolher?
GCM é a resposta por defeito: cifra e autentica — a linha da tag torna a adulteração detetável (experimente decifrar com um byte da tag alterado: a página recusa). CBC oculta os padrões de blocos, mas não garante integridade; associe-o a um HMAC (ver o gerador HMAC) se tiver de o usar. CTR transforma o AES numa cifra de fluxo — sem enchimento, mas um nonce reutilizado sob a mesma chave é catastrófico tanto no CTR como no GCM. ECB está aqui apenas por compatibilidade e para fins didáticos: blocos de texto limpo iguais dão blocos cifrados iguais (o famoso pinguim ECB).
Interoperabilidade com OpenSSL — as saídas CBC e CTR desta página (enchimento PKCS#7, chave em bruto) fazem ida e volta com a linha de comandos openssl enc:
openssl enc -aes-256-cbc -K <chave-64-hex> -iv <iv-32-hex> -in msg.txt -out msg.enc
openssl enc -d -aes-256-cbc -K <chave> -iv <iv> -in msg.enc -out msg.txt
O mesmo funciona com -aes-128-cbc, -aes-192-cbc, -aes-256-ctr (IV de 16 bytes = bloco de contador inicial). Note que o openssl enc não suporta GCM — use esta página, ou openssl aesgcm do OpenSSL 3.3 ou posterior, para a cifragem autenticada.
Precisa antes da cifra nacional chinesa?
SM4 (GB/T 32907-2016) — a cifra de blocos prescrita na criptografia comercial chinesa, com o mesmo bloco e tamanho de chave de 128 bits do AES, mas com o seu próprio escalonamento de chaves e a sua própria S-box — tem página própria, nos modos ECB e CBC: SM4 Cifrar / Decifrar. O restante conjunto SM também lá está: SM3 (hash), SM2 (chave pública) e SM9 (criptografia baseada em identidade).
Autoteste
Executa os motores da página contra referências independentes: vetores de resposta conhecida para os quatro modos (gerados por uma implementação nativa independente), vetores de tag GCM com e sem AAD, verificações cruzadas do motor WebCrypto contra o motor AES em JavaScript puro, ida e volta GCM e testes negativos (uma tag adulterada ou uma chave errada têm de falhar). Nada é enviado para lado nenhum.
A cifragem AES explicada do zero
Em resumo: o AES é a cifra de blocos padrão mundial — embaralha blocos de 16 bytes com uma chave de 128, 192 ou 256 bits — e o modo em que é executado (GCM, CBC, CTR, ECB) determina como esses blocos são encadeados, para que serve o IV e se a adulteração é detetável. Escolha o GCM, salvo se tiver razão para não o fazer.
O que é o próprio AES (FIPS 197)

A cifra de blocos. O AES (o desenho Rijndael, normalizado pelo NIST em 2001 como FIPS 197) cifra exatamente 16 bytes de cada vez. O comprimento da chave — 16, 24 ou 32 bytes — seleciona AES-128, -192 ou -256 e o número de rondas internas (10, 12 ou 14). Cada ronda mistura o bloco com subchaves derivadas da sua chave, através de tabelas de substituição, deslocamentos de linhas e misturas de colunas. Nenhum ataque prático quebra a própria cifra: as falhas reais surgem quase sempre de erros de modo, de IV ou de gestão de chaves, que é precisamente o tema do resto desta página.

Porquê um modo? Porque as mensagens raramente têm 16 bytes. O modo liga entre si as cifragens de blocos: o ECB cifra os blocos de forma independente; o CBC aplica XOR de cada bloco com o bloco cifrado anterior; o CTR cifra um contador e aplica-o em XOR com os dados, como uma cifra de fluxo; o GCM assenta no CTR e acrescenta uma tag de autenticação. O AES mantém-se o mesmo — o modo muda tudo quanto às garantias obtidas.

Chaves e palavras-passe. Uma chave AES é feita de 16, 24 ou 32 bytes aleatórios. Uma palavra-passe escrita por uma pessoa não o é: a opção Palavra-passe desta página deriva uma chave adequada com PBKDF2-HMAC-SHA256 (600 000 iterações por defeito, a referência OWASP de 2023 — pormenores da derivação no gerador HMAC). Nunca use uma cadeia de palavra-passe diretamente como chave AES: a sua entropia é apenas uma pequena fração do comprimento.

Comparação dos quatro modos
ModoIV / nonceIntegridadeNotas
GCM12 bytes, único por mensagemSim — tag de 96 a 128 bitsAEAD: a predefinição recomendada em todo o lado (TLS 1.3, SSH, formatos de ficheiro). Aceita também AAD.
CBC16 bytes, imprevisívelNãoEnchimento PKCS#7; clássico, mas exige um MAC em paralelo. Os erros de oráculo de enchimento são a armadilha clássica do CBC.
CTRContador inicial de 16 bytesNãoSem enchimento, funcionamento em fluxo, acesso aleatório; reutilizar o nonce sob a mesma chave revela o XOR dos textos limpos.
ECBnenhumNãoBlocos iguais dão textos cifrados iguais. A demonstração do pinguim ECB. Apenas para compatibilidade.

Regras do IV num parágrafo. O IV não é um segredo — envie-o junto ao texto cifrado —, mas as suas regras de unicidade diferem: o CBC exige um IV imprevisível; o GCM e o CTR exigem apenas que o mesmo nonce nunca seja reutilizado com a mesma chave (a reutilização de um nonce GCM é pior: revela a chave de autenticação). O botão « IV aleatório » desta página usa o gerador seguro do navegador; o botão « Tudo a zero » existe apenas para reproduzir vetores de teste, não para cifrar mensagens reais.

Enchimento. O CBC e o ECB exigem blocos inteiros; por isso o enchimento PKCS#7 acrescenta de 1 a 16 bytes, cada um igual ao comprimento do enchimento. É por isso que os textos cifrados CBC podem crescer até 16 bytes, e por que razão decifrar com a chave errada normalmente falha com um erro de enchimento. O CTR e o GCM funcionam como cifras de fluxo e não precisam de enchimento: o comprimento do texto cifrado é exatamente o do texto limpo (experimente o Exemplo em modo CTR: 43 bytes entram, 43 bytes saem).

CFB e OFB (os dois outros modos clássicos) não estão implementados nesta página: funcionam como o CTR, em fluxo, mas não têm qualquer vantagem sobre ele e sobrevivem sobretudo em protocolos antigos.

O que acrescenta o GCM (AEAD, tags, AAD)

Cifragem autenticada. GCM = cifragem CTR + um autenticador GHASH sobre o texto cifrado, o IV e o AAD. A tag de saída é uma impressão digital de tudo: se alterar um único bit do texto cifrado, do IV ou do AAD, a tag deixa de corresponder, e o destinatário pode provar que a mensagem está íntegra e que vem de quem detém a chave. O CBC+HMAC só consegue o mesmo se for composto corretamente (cifrar e depois autenticar) — o GCM garante-o por construção.

AAD. Os dados adicionais autenticados circulam em claro, mas ficam cobertos pela tag: cabeçalhos de protocolo, nomes de ficheiro, identificadores de algoritmo. O destinatário tem de fornecer exatamente os mesmos bytes de AAD, ou a verificação da tag falha — é precisamente esse o objetivo.

Comprimento da tag. A tag predefinida de 128 bits é a recomendada; tags mais curtas (96 a 120 bits) trocam resistência a falsificações por tamanho. Abaixo de 96 bits, as provas de segurança do GCM degradam-se rapidamente, razão pela qual esta página para aí.

A catástrofe do nonce. Reutilizar um nonce GCM de 12 bytes sob a mesma chave revela o XOR dos dois textos limpos e a subchave de autenticação — depois disso, são possíveis falsificações para todas as mensagens futuras sob essa chave. Os sistemas que não conseguem garantir a unicidade usam variantes resistentes a uso indevido de nonce (AES-GCM-SIV, RFC 8452).

Valores de referência — para reproduzir nesta página

A primeira linha é o exemplo clássico de bloco único da FIPS 197; as restantes foram geradas por uma implementação nativa independente (OpenSSL via Node.js) e reverificadas nos motores desta página. Cole a chave, o IV e a entrada na página para reproduzir cada linha.

CasoEntradasSaída esperada
AES-128, bloco único (estilo FIPS 197)key 000102..0f, plaintext 00112233..ff69c4e0d86a7b0430d8cdb78070b4c55a
AES-128-GCMkey 000102..0f, IV 606162..6b, plaintext 0011..ef ×2ct 275f095bedfda377063fee326128892188377b410698ed03a022b9971bb4bdbe, tag 87ea7770714048977de2fd8dac645ecf
AES-256-GCM, igual, mas com AAD deadbeefkey 000102..1fct eacab966ff15e518f48f5390be502fbc2756ccee0dcfff36a282c50bf5593ae7, tag aead900e895c88252d0388d7aefce5c8
AES-256-CBCkey 000102..1f, IV 101112..1f, plaintext 0011..ef ×20e2392dd6f690b44a5a1b4fdff3b7f83cb9ab59d9900119cc5f83e062d95fb643b1a94b514ea2f3b95f84c900b5c98a8
AES-256-CTR (mesma entrada que o CBC acima)43-byte plaintext → 43-byte ciphertexte9d2cdb9f661359178ed366dfa3a4671f8e20efd723f090eb7d1d524d480fd3c
Erros comuns
  • Usar ECB porque não precisa de IV. A comodidade é a armadilha: os padrões dos blocos passam diretamente para o texto cifrado (cifre uma imagem bitmap e ainda se vê a figura). O ECB só é aceitável para blocos isolados ou chaves aleatórias de exatamente 16 bytes — na prática, nunca por escolha.
  • Reutilizar um nonce ou IV. Com GCM ou CTR sob uma mesma chave, é o único erro que estraga tudo de uma vez. Os sistemas baseados em contador (o botão « IV aleatório » desta página) existem para o tornar impossível.
  • Considerar o IV secreto. Não é. Guarde-o ou transmita-o junto ao texto cifrado. Ocultá-lo não traz nenhum benefício e incentiva a reutilização.
  • Usar uma palavra-passe como chave. "hunter2hunter2hunter2hunter2" tem 32 bytes, mas não 256 bits de entropia — é uma palavra do dicionário com enchimento. Derive a chave com PBKDF2 (integrado nesta página) ou gere uma chave aleatória.
  • Presumir que o CBC deteta adulterações. Se inverter um bit do texto cifrado CBC, a decifragem « tem êxito » e devolve texto limpo corrompido sem qualquer aviso. Só a tag do GCM (ou um HMAC explícito) torna a adulteração visível.
  • Comparar textos cifrados GCM quanto à igualdade. Com nonces aleatórios, o mesmo texto limpo é cifrado de forma diferente em cada vez — isso é uma funcionalidade. A cifragem determinística é uma ferramenta diferente e especializada.
FAQ

O AES-128 continua seguro, ou preciso de 256? Ambos são seguros contra atacantes realistas; os melhores ataques conhecidos reduzem apenas uma pequena fração da margem. O AES-256 importa sobretudo para segredos de longo prazo e para a resistência pós-quântica (o algoritmo de Grover reduz para metade a força da chave, deixando o AES-256 com um equivalente de 128 bits).

Porque é que o openssl enc não faz GCM? O comando enc é anterior ao AEAD e não tem forma de transportar uma tag; o OpenSSL 3.3 acrescentou para isso um comando dedicado, aesgcm. A saída GCM desta página coloca a tag na sua própria linha, para que possa mover as duas partes separadamente.

O que é o encapsulamento de chaves (AES-KW)? Um modo especializado para cifrar outras chaves em blocos fixos de 64 bits, com o seu próprio controlo de integridade. Não é oferecido aqui, porque as suas entradas e saídas têm forma de chave e não de mensagem — o uso incorreto é a norma.

Porque é que o texto cifrado CTR tem o mesmo comprimento do texto limpo, mas o de CBC é mais longo? CTR e GCM funcionam como cifras de fluxo (sem enchimento); CBC e ECB completam até um bloco inteiro de 16 bytes com PKCS#7. A diferença de comprimento é intencional, não é um erro.

Posso decifrar algo cifrado noutro lugar? Sim, se souber exatamente o modo, a chave, o IV (e, no caso do GCM, a tag). As linhas de saída desta página registam todos esses elementos com precisão, para que possa transpor os parâmetros entre ferramentas; a caixa OpenSSL acima mostra as linhas de comando correspondentes.