A descriptografia DES falha com "bad decrypt" ou erro de padding — o que eu verifico?
A descriptografia exige que cada parâmetro seja igual ao lado que criptografou: os bytes da chave, o tamanho da chave (8/16/24), o modo (ECB/CBC), o IV, o padding e se o texto cifrado está em hex ou Base64. As duas armadilhas mais comuns: tamanho de chave diferente (uma "chave DES" de 32 caracteres hex é 16 bytes — isso é 3DES de 2 chaves, não DES simples) e confusão de nome de padding (o PKCS5Padding do Java É PKCS#7 para DES — não escolha None). O painel retrátil à direita mostra um comando OpenSSL equivalente para as configurações atuais; enviá-lo para o outro lado é o jeito mais rápido de encontrar a divergência.
Qual é o tamanho de uma chave DES? E do 3DES?
DES simples: 64 bits nominais (8 bytes, 56 efetivos — um bit por byte é de paridade). O 3DES vem em duas formas: 2 chaves (16 bytes, K1‖K2 com K3=K1) e 3 chaves (24 bytes, K1‖K2‖K3). O material de chave nominal é de 112/168 bits, mas a força de segurança efetiva segundo o NIST (SP 800-57 Part 1 Rev.5, tabela 2) é de cerca de 80 e 112 bits — e a forma de 3 chaves também está descontinuada. Esta ferramenta identifica a forma pelo número de bytes; qualquer coisa que não seja 8/16/24 gera erro — CryptoJS e openssl enc -K truncam silenciosamente ou completam com zeros, que é a principal causa de falhas de interoperabilidade.
O que é o IV e qual seu tamanho no DES?
O IV é o valor de 8 bytes que o CBC mistura no primeiro bloco; o ECB não usa um. Ele deve ter exatamente 8 bytes (16 dígitos hex ou 8 caracteres ASCII). Note que o IV do DES tem 8 bytes enquanto o do AES tem 16 — copiar um tamanho de IV do AES falha imediatamente. Nunca reutilize um IV com a mesma chave.
A que corresponde o DES/ECB/PKCS5Padding do Java nesta ferramenta?
Modo ECB + padding PKCS#7. No JCE, "PKCS5Padding" para DES executa o algoritmo genérico PKCS#7 — o PKCS#5 só definiu padding para blocos de 8 bytes, que é justamente o do DES. A saída de Java Cipher.getInstance("DES/ECB/PKCS5Padding") é descriptografada aqui com ECB + PKCS#7 e uma chave DES simples de 8 bytes. ⚠️ O 3DES do Java (DESede) aceita apenas chaves de 24 bytes — para a forma de 2 chaves você mesmo deve expandir K1‖K2 para K1‖K2‖K1.
Como mapeiam os nomes de algoritmo des-ede3 do PHP?
O PHP empresta os nomes do OpenSSL: des-ede3-cbc é 3DES de 3 chaves + CBC, des-ede3-ecb é 3 chaves + ECB; des-ede-cbc é a forma de 2 chaves. Uma chave de 24 bytes seleciona 3 chaves, 16 bytes selecionam 2 chaves.
Quais são os bits de paridade em uma chave DES? Eles são verificados?
O bit menos significativo de cada byte da chave é definido como bit de paridade, então a chave verdadeira de 56 bits fica dentro de 64 bits. O FIPS 46-3 não exige verificação — OpenSSL, Java e esta ferramenta todos ignoram; quaisquer 8 bytes funcionam, e mudar os bits de paridade não muda o texto cifrado. O .NET é a exceção: ele normaliza a paridade primeiro e depois consulta uma tabela de chaves fracas, então chave nula e outras chaves fracas são rejeitadas pelo .NET enquanto toda outra biblioteca criptografa feliz — uma armadilha que só dispara ao migrar chaves de teste de Java/OpenSSL para .NET.
O que acontece no 3DES quando K1 = K2?
No 3DES de 2 chaves, K3 é sempre igual a K1; se K1 = K2 também, toda a cadeia EDE colapsa para DES simples: E_K(D_K(E_K(P))) = E_K(P). O mesmo acontece quando os três componentes de 8 bytes de uma chave de 24 bytes são idênticos. Esta ferramenta ainda criptografa (interop primeiro), mas a força real passa a ser a do DES simples, 56 bits, não a do 3DES.
O DES ainda é seguro?
Não — serve apenas para interoperabilidade legada. O NIST retirou o DES simples em 19/05/2005 (chaves de 56 bits são quebráveis por força bruta; o Deep Crack da EFF fez isso em 56 horas em 1998, 22 horas no ano seguinte com distributed.net). O SP 800-131A Rev.2 classifica a criptografia TDEA de 2 chaves como Disallowed e a de 3 chaves como Disallowed após 31/12/2023 (a descriptografia permanece "Legacy use", mantida só para ler dados históricos); o próprio SP 800-67 foi retirado em 01/01/2024. O bloco pequeno de 64 bits também carrega o limite de aniversário da classe Sweet32 (CVE-2016-2183) — o NIST limita um único conjunto de chaves a 2²⁰ blocos (≈8 MB) de texto claro. Use AES-256 para qualquer coisa nova. Esta ferramenta existe porque clearings bancários, gateways de pagamento e sistemas antigos Java/.NET ainda rodam mensagens da era DES — corrigi-los começa por conseguir lê-los.
Por que meu resultado 3DES difere do Java/PHP?
Verifique em ordem de taxa de acerto: ① tamanho da chave — a "chave DES de 32 hex" do outro lado tem 16 bytes (3DES de 2 chaves), você descriptografou como DES simples; ② modo — o "DES" puro do Java usa ECB por padrão, os nomes do OpenSSL sem sufixo de modo, des-ede3/des-ede, são ECB (o alias de CBC é -des3); o openssl_encrypt do PHP exige o nome do algoritmo explícito — o que confunde é que por padrão ele gera texto Base64, não bytes brutos; ③ padding — o mcrypt antigo do PHP costumava usar Zero padding, o JCE usa PKCS#5/#7; ④ codificação — hex vs Base64, e maiúsculas/minúsculas; ⑤ a armadilha da senha do CryptoJS — passar uma string como "chave" faz rodar derivação de chave (MD5 + salt aleatório, saída prefixada Salted__, diferente a cada vez), que não é a chave bruta — a principal causa de "mesmo código, resultado diferente a cada execução". Esta ferramenta deixa você alternar cada item; o comando OpenSSL equivalente à direita pode ser enviado ao outro lado para reproduzir.
ECB ou CBC — qual usar?
O que o sistema com quem você conversa exigir — interoperabilidade legada não tem voto. Se você puder escolher, sempre CBC com IV aleatório: o ECB criptografa blocos iguais de texto claro em blocos iguais de texto cifrado, e os blocos pequenos de 8 bytes do DES vazam padrões de forma ainda mais visível que o AES-ECB. Protocolos bancários da era DES usam os dois; consulte antes o documento do protocolo.
Funciona offline? Meus dados são enviados?
Todo o cálculo acontece no seu navegador (TypeScript puro, zero dependências, zero requisições de rede); chaves e texto claro nunca saem do dispositivo. Depois que a página carrega, você pode ficar offline e continuar trabalhando. Essa é a única forma aceitável para uma ferramenta que manipula chaves.
3DES de 2 ou 3 chaves — qual é mais comum em sistemas legados?
2 chaves (16 bytes) é mais comum: bancos e a indústria de pagamento implantaram hardware com chave de 16 bytes por compatibilidade, e o SP 800-67 manteve para ele uma data de descontinuação separada (mais cedo). Então uma "chave 3DES" de 32 caracteres hex provavelmente é a forma de 2 chaves. Esta ferramenta detecta a forma pelo número de bytes automaticamente.