Como criptografar e descriptografar texto AES

Uma caixa de texto e um campo de senha: Criptografar transforma o texto claro em um texto cifrado AES que começa com U2FsdGVkX1, e Descriptografar devolve esse texto cifrado como texto UTF-8. As duas etapas rodam dentro da página: o ciclo completo continua funcionando com a rede desligada.

A chave não fica guardada em lugar nenhum. Ela é derivada da senha e de um sal aleatório novo a cada execução, e por isso o mesmo texto com a mesma senha gera uma string diferente toda vez.

  1. Cole o texto que deseja criptografar, ou um texto cifrado existente que comece com U2FsdGVkX1, na caixa do topo.
  2. Digite a senha no campo ao lado dos botões. Ela é o único segredo: a mesma senha é necessária para ler o resultado de volta.
  3. Clique em Criptografar ou Descriptografar. O resultado novo substitui o anterior e, quando a operação falha, a saída é limpa em vez de manter o texto antigo na tela.
  4. Confirme o resultado com uma segunda ferramenta quando isso importar: openssl enc -d -aes-256-cbc -md md5 -a -pass pass:SUA_SENHA descriptografa um texto gerado aqui.
  5. Clique em Limpar para esvaziar o texto, a senha e o resultado antes da próxima execução.

O que a saída realmente é

O contêiner Salted__ e o sal aleatório

O resultado é Base64 cujos primeiros bytes decodificam para Salted__, seguidos de oito bytes de sal aleatório e do texto cifrado. A chave e o IV vêm da senha e desse sal por EVP_BytesToKey com MD5, o mesmo esquema que o openssl enc usa para cifrar com senha.

Como o sal é novo a cada execução, a mesma frase vira uma string diferente toda vez e as duas voltam ao mesmo texto. Verificado nos dois sentidos: o openssl lê a saída desta página e esta página lê a saída de openssl enc -aes-256-cbc -md md5.

O que a página não consegue verificar

O algoritmo é AES-256-CBC e o contêiner não tem assinatura nem etiqueta de autenticação. Senha errada, string truncada e byte alterado terminam no mesmo aviso, e um texto cifrado alterado pode sair como texto ilegível: em um teste com seis alterações aleatórias de um caractere, cinco falharam e uma devolveu lixo sem avisar.

A derivação é uma única passada de MD5 sobre a senha, sem o fator de trabalho que PBKDF2 ou Argon2 acrescentam. A senha é, portanto, o ponto fraco: esta página serve para reproduzir e inspecionar dados AES existentes, não para proteger segredos novos.

Compatibilidade e limites

Entra texto, sai texto: arquivos, dados binários e entrada em hexadecimal não são tratados aqui. Um texto cifrado só é descriptografado se for este contêiner com sal e senha no modo CBC; saída com -nosalt, com -K e -iv explícitos, com outro modo como ECB ou de outra biblioteca falha com o mesmo aviso.

200 KB de texto são criptografados em cerca de 15 ms no Chrome; para vários megabytes, uma ferramenta de linha de comando local é mais adequada.

Ferramentas recentes: