Como criptografar e descriptografar texto com RC4

Esta página criptografa e descriptografa texto com RC4 dentro do navegador. O resultado é texto Base64 no contêiner de senha do CryptoJS que começa com U2FsdGVkX1, e a mesma frase devolve o texto original. O RC4 é uma cifra de fluxo antiga, com vieses conhecidos: use a página para ler dados legados e reproduzir a saída de outras ferramentas, não para proteger algo novo.

O texto e a senha ficam na página: nada é enviado e a operação termina do mesmo jeito com a rede desligada. Nada é armazenado, então uma senha perdida não pode ser recuperada aqui. A entrada e a saída são apenas texto: não há upload de arquivo, nem modo binário, nem botão de download.

  1. Cole o texto que deseja criptografar na área de texto e digite a senha no campo ao lado dos botões.
  2. Clique em Criptografar. O resultado Base64 aparece no painel abaixo; o mesmo texto e a mesma frase geram uma string diferente a cada vez, porque cada execução sorteia um sal novo.
  3. Para ler uma mensagem, cole a string Base64 inteira na área de texto, informe a mesma frase e clique em Descriptografar.
  4. Copy copia o resultado para a área de transferência; Clear limpa a área de texto, a frase e o resultado.
  5. Guarde a frase em local seguro: é o único segredo do processo, e a página não mantém cópia dela nem do texto.

O contêiner, o OpenSSL e os limites do RC4

Do que o resultado Base64 é feito

A saída é um contêiner de senha do CryptoJS: os oito bytes Salted__ (por isso a string começa com U2FsdGVkX1), oito bytes de sal aleatório e então a saída do RC4, tudo em Base64. O material de chave é derivado da frase e do sal com EVP_BytesToKey e MD5 e tem 32 bytes. Nos testes, uma implementação independente dessa derivação descriptografou a saída desta página, e um texto cifrado montado do mesmo jeito foi descriptografado de volta na página.

A descriptografia lê o sal do próprio contêiner, então só a frase precisa acompanhar o texto cifrado. Um sal diferente significa um fluxo de chave diferente: é por isso que a mesma frase gera cifras distintas a cada execução e que todas elas voltam ao mesmo texto. O texto é lido como UTF-8; o que não for UTF-8 válido não tem representação aqui.

O OpenSSL e esta página não falam o mesmo RC4

O OpenSSL deriva uma chave RC4 de 16 bytes (openssl enc -rc4 -md md5; -rc4-40 usa cinco), enquanto o CryptoJS desta página usa 32, então um não lê a saída do outro. Nos testes, o OpenSSL transformou um texto cifrado da página em lixo, e esta página respondeu a um contêiner de openssl enc -rc4 com a mensagem de frase incorreta. Dar uma chave maior ao OpenSSL não resolve: -K com 64 caracteres hexadecimais imprimiu “hex string is too long, ignoring excess” e usou os primeiros 16 bytes.

Interoperar exige implementar a mesma derivação de chave: EVP_BytesToKey(MD5) sobre a frase e o sal, pegar 32 bytes e rodar o RC4. Se você quer uma contraparte de linha de comando que funcione sem ajustes, a página AES desta família corresponde exatamente a openssl enc -aes-256-cbc -md md5, e o próprio openssl enc -rc4 é legado: o OpenSSL 3 só o oferece pelo provedor legacy.

Frase errada, bytes editados, texto cifrado truncado

Uma senha errada ou uma string que não seja um destes contêineres gera um aviso abaixo dos botões, no idioma da página. A verificação é um teste de validade UTF-8 sobre os bytes descriptografados, então é uma conveniência e não uma garantia: nos testes, 24 tentativas com senha errada foram todas sinalizadas, mas um fluxo de chave que por acaso decodifica como texto passa em silêncio.

O RC4 não oferece autenticação, e nem edições nem truncamento são detectados de forma confiável. Alterar um byte do texto cifrado mudou exatamente um caractere do texto recuperado e não mostrou aviso, e cortar o texto cifrado para cerca de 60 % do comprimento devolveu a primeira parte da frase como se fosse a mensagem inteira. Onde a adulteração importa, use uma cifra autenticada como AES-GCM; esta página serve para reproduzir e inspecionar dados RC4 legados.

Ferramentas recentes: