Pular para o conteúdo
ecdsa.com
CryptoJSOutras ferramentas

Mensagem de erro

Malformed UTF-8 data

CryptoJS — thrown by .toString(CryptoJS.enc.Utf8) after decrypt

O que significa

O CryptoJS descriptografou o texto cifrado em bytes que não são UTF-8 válido, e a conversão para string falhou. Como o AES do CryptoJS (modo CBC) não tem verificação de integridade, uma chave errada não faz a descriptografia falhar — ela só produz bytes aleatórios, e o decodificador UTF-8 é o primeiro a perceber. A mesma chave errada também pode resultar em uma string vazia em vez desse erro (quando a verificação do padding, por acaso, falha de forma limpa), então os dois sintomas têm o mesmo diagnóstico.

Por que acontece

Como corrigir

  1. 1.

    Tornar o tratamento da chave explícito e simétrico

    Evite a ambiguidade da KDF da frase secreta: passe uma chave de verdade como WordArray mais um IV explícito, de forma idêntica nos dois lados.

    js
    const key = CryptoJS.enc.Hex.parse(hexKey);        // 32-byte key, both sides
    const iv  = CryptoJS.enc.Hex.parse(hexIv);         // 16-byte IV, both sides
    const ct  = CryptoJS.AES.encrypt(plaintext, key, { iv });
    const pt  = CryptoJS.AES.decrypt(ct.toString(), key, { iv })
                  .toString(CryptoJS.enc.Utf8);
  2. 2.

    Tratar a saída vazia como a mesma falha

    Verifique o resultado e exponha um erro real — strings vazias silenciosas escondem bugs de chave errada por meses.

    js
    const pt = CryptoJS.AES.decrypt(ct, key, { iv }).toString(CryptoJS.enc.Utf8);
    if (!pt) throw new Error("decryption failed: wrong key/IV or corrupted ciphertext");
  3. 3.

    Preferir um esquema autenticado

    O AES-GCM do WebCrypto autentica o texto cifrado: uma chave errada falha de forma explícita e determinística em vez de produzir lixo — o que elimina essa classe de erro por completo.

    js
    const pt = await crypto.subtle.decrypt({ name: "AES-GCM", iv }, key, ct);
    // wrong key → OperationError, never silent garbage

Erros relacionados

Ver toda a base de erros de assinatura