Cifragem / decifragem AES — GCM, CBC, CTR e ECB no seu navegador
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.
Chave(bytes em bruto: 16, 24 ou 32 bytes = AES-128/192/256; o comprimento do que colar determina o tamanho)
O hexadecimal aceita espaços, dois-pontos e prefixos 0x.
Sal (hex, 8 a 16 bytes):
Iterações:Tamanho da chave:
O sal acompanha o texto cifrado: quem decifra precisa da mesma palavra-passe, do mesmo sal, do mesmo número de iterações e do mesmo tamanho de chave. A OWASP recomenda pelo menos 600 000 iterações PBKDF2-HMAC-SHA256.
IV / nonce(GCM: 12 bytes; CBC/CTR: 16 bytes — em hex)
Nunca reutilize um nonce com a mesma chave em GCM ou CTR.
AAD(dados adicionais autenticados: autenticados, mas não cifrados; opcional)
Comprimento da tag:
Tag de autenticação(hexadecimal, tal como apresentada por esta página na cifragem; obrigatória para decifrar)
Plaintext text (the data to encrypt, UTF-8 encoded)
Escolha um ficheiro ou arraste-o para aqui O ficheiro é lido localmente em blocos de 8 MB; nada é carregado. Até 200 MB.
Ciphertext (uma linha: modo, tamanho da chave, valor; parâmetros nas linhas abaixo)
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 encnã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
Modo
IV / nonce
Integridade
Notas
GCM
12 bytes, único por mensagem
Sim — tag de 96 a 128 bits
AEAD: a predefinição recomendada em todo o lado (TLS 1.3, SSH, formatos de ficheiro). Aceita também AAD.
CBC
16 bytes, imprevisível
Não
Enchimento 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.
CTR
Contador inicial de 16 bytes
Não
Sem enchimento, funcionamento em fluxo, acesso aleatório; reutilizar o nonce sob a mesma chave revela o XOR dos textos limpos.
ECB
nenhum
Não
Blocos 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.
Caso
Entradas
Saída esperada
AES-128, bloco único (estilo FIPS 197)
key 000102..0f, plaintext 00112233..ff
69c4e0d86a7b0430d8cdb78070b4c55a
AES-128-GCM
key 000102..0f, IV 606162..6b, plaintext 0011..ef ×2
ct 275f095bedfda377063fee326128892188377b410698ed03a022b9971bb4bdbe, tag 87ea7770714048977de2fd8dac645ecf
AES-256-GCM, igual, mas com AAD deadbeef
key 000102..1f
ct eacab966ff15e518f48f5390be502fbc2756ccee0dcfff36a282c50bf5593ae7, tag aead900e895c88252d0388d7aefce5c8
AES-256-CBC
key 000102..1f, IV 101112..1f, plaintext 0011..ef ×2
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.