Como criptografar e descriptografar texto com TripleDES

Esta página transforma texto em um bloco TripleDES em Base64 e esse bloco de volta em texto. Cole o conteúdo, digite a senha, pressione Criptografar ou Descriptografar e copie o resultado do painel abaixo dos botões. O trabalho acontece no navegador e nada do que você cola é enviado.

O bloco é o contêiner que o CryptoJS grava: Base64 cujos primeiros bytes decodificados são os oito caracteres Salted__, seguidos de oito bytes de salt aleatório e do texto cifrado. A linha de comando do OpenSSL grava a mesma forma para o Triple DES, então cada lado pode receber a saída do outro.

  1. Cole o texto que você quer proteger no campo do topo, ou cole um bloco em Base64 quando quiser lê-lo de volta.
  2. Digite a senha no campo da chave. As duas direções exigem a mesma senha, e uma senha vazia é recusada em vez de virar um bloco que ninguém conseguirá abrir.
  3. Pressione Criptografar para ir de texto a Base64, ou Descriptografar para o caminho inverso. O resultado aparece no painel abaixo dos botões; a linha de status só é preenchida quando algo falha.
  4. Pressione Copiar para levar o resultado inteiro para a área de transferência, ou selecione o texto à mão. Limpar esvazia o campo, a senha e o resultado antes do próximo documento.
  5. Guarde a senha junto do bloco. Sem ela o bloco fica fechado: aqui não há recuperação, nem reinício, nem custódia de chaves.

O contêiner com sal, o OpenSSL e o que significa uma descriptografia que falha

O que o resultado em Base64 contém

Ao decodificar o resultado aparecem três partes: os caracteres ASCII Salted__, oito bytes de salt do gerador aleatório do navegador e o próprio texto cifrado, gravado em blocos de 8 bytes com preenchimento PKCS#7. Uma entrada de 31 caracteres ocupa, portanto, 48 bytes de cifra, e uma de um único caractere ocupa oito.

O salt é novo a cada clique, então o mesmo texto com a mesma senha gera uma cadeia Base64 diferente toda vez, e comparar duas execuções a olho não prova que as entradas eram iguais. A senha não é a chave: ela é esticada com MD5 até uma chave TripleDES de 24 bytes e um IV de 8 bytes, exatamente o que a linha de comando do OpenSSL faz com -md md5. O resultado sai quebrado em várias linhas como o da linha de comando, e é lido de volta com ou sem essas quebras.

O OpenSSL lê esta saída e esta página lê o OpenSSL

Medido no OpenSSL 1.1.1k: openssl enc -d -des-ede3-cbc -md md5 -a -k descriptografa um bloco desta página, e um bloco gravado com openssl enc -des-ede3-cbc -md md5 -a -k é descriptografado aqui. Ao receber o salt de um bloco da página, a linha de comando imprimiu a mesma chave de 24 bytes e o mesmo IV de 8 bytes que esta página deriva, e reproduziu aquele bloco byte a byte.

A opção faz parte do formato e não é detalhe: um bloco gravado com -md sha256 ou com -pbkdf2 é recusado aqui, porque outra derivação produz outra chave. Os seus dados não estão corrompidos, apenas foram trancados com outra derivação: descriptografe com a ferramenta que os gravou ou regrave com -md md5 enquanto você tem a senha.

Quando a descriptografia falha, e para que o TripleDES ainda serve

Senha errada, um caractere alterado no Base64 e um texto comum colado como se fosse um bloco terminam do mesmo jeito: o resultado é apagado e uma única mensagem lista as três causas possíveis. A falha não pode ser atribuída a uma delas, porque a checagem de preenchimento falha antes de a chave poder ser julgada. Entrada vazia e senha vazia têm mensagens próprias.

O TripleDES é uma cifra herdada: três chaves DES sobre blocos de 8 bytes, retirada dos projetos novos e mantida viva por dados que já estão guardados nele. Use esta página para ler esses dados ou gravar um valor compatível; para o que é novo, use AES. E uma ida e volta bem-sucedida só prova que a senha coincidia: não diz quem gravou o bloco nem se o texto plano merece confiança.

Ferramentas recentes: