Sem upload, 100% local, sem conta

Artigo

Codificar e decodificar dados com privacidade

Todos os dias os desenvolvedores colam tokens, cargas e credenciais em páginas de codificação e decodificação. As mais práticas rodam em um servidor, o que significa que seus dados saem da sua máquina para uma tarefa que nunca exigiu isso. Estas quatro ferramentas funcionam inteiramente no navegador, então os dados permanecem com você.

Base64: parece embaralhado, mas não é secreto

Base64 é uma codificação, não uma criptografia. Ele transforma dados binários em texto capaz de sobreviver a um copiar e colar ou ao trânsito por sistemas que só lidam com caracteres simples. Qualquer um que veja a string Base64 pode decodificá-la de volta ao original em uma única etapa, então uma string que contém uma chave de API, um certificado privado ou o corpo de um e-mail fica totalmente legível para quem a possui. O risco é que esse valor costuma se esconder em arquivos de configuração, data URLs ou cabeçalhos de autenticação e parece obscuro, o que tenta a pessoa a colá-lo no primeiro decodificador que encontra on-line. Esse decodificador recebe o segredo em bruto. Uma ferramenta que decodifica Base64 localmente mostra os bytes originais sem que o valor chegue a um servidor.

Hello! codificado como SGVsbG8h e depois decodificado, mostrando que o Base64 é reversível por qualquer pessoa sem uma chave.

Codificação de URL: as query strings carregam mais do que você imagina

A codificação por porcentagem permite colocar espaços, acentos e caracteres reservados em uma URL com segurança. O texto que você codifica ou decodifica é com frequência uma query string real de uma aplicação, e elas carregam identificadores de sessão, termos de busca, endereços de e-mail, destinos de redirecionamento e às vezes parâmetros assinados. Colar uma URL completa em um codificador remoto entrega tudo isso a um terceiro de uma só vez, e as query strings são justamente o tipo de valor que acaba nos logs do servidor. Codificar e decodificar no navegador significa que a URL é processada na memória do seu próprio dispositivo e nunca é transmitida enquanto você trabalha nela.

JWT: a carga é assinada, não escondida

Um JSON Web Token tem três seções Base64url unidas por pontos: um cabeçalho, uma carga e uma assinatura. A assinatura prova que o token não foi adulterado, mas não faz nada para ocultar a carga, que se decodifica em JSON legível contendo identificadores de usuário, papéis, prazos de expiração e quaisquer claims personalizados que o emissor adicionou. Um token válido também é uma credencial viva: até expirar, quem o possui pode agir como o usuário. Colar um token funcional em um decodificador on-line envia uma credencial ativa para um servidor que você não controla. Um decodificador que analisa o token no seu navegador revela o mesmo cabeçalho e a mesma carga sem que esse token saia da página.

As três partes de um JWT: cabeçalho legível, payload legível, e uma assinatura que comprova a integridade sem esconder nada.

Hashing: a entrada importa mais do que o resumo

Uma função de hash transforma qualquer entrada em um resumo de comprimento fixo, e você não pode reverter o resumo de volta à entrada. Essa propriedade torna o hashing útil para verificar a integridade de um arquivo ou comparar valores sem armazenar o original. O detalhe está no lado da entrada: para calcular o hash de uma senha, um documento ou um segredo de configuração, você precisa fornecer o valor real à ferramenta. Se essa ferramenta roda em um servidor, a entrada sensível viaja até lá mesmo que só o resumo inofensivo seja devolvido. Calcular o hash localmente mantém a entrada no seu dispositivo, então você obtém o resumo que precisa sem expor aquilo que estava processando.

Codificação Base64: mapeamento de bytes e preenchimento

O Base64 traduz bytes de 8 bits em caracteres de 6 bits agrupando três bytes de entrada (24 bits) em quatro valores de 6 bits. Cada valor de 6 bits mapeia para um caractere no alfabeto Base64 (A-Z, a-z, 0-9, +, /). Como o processo requer entradas divisíveis por 24 bits, entradas curtas são preenchidas: um byte restante produz dois caracteres de preenchimento (==), e dois bytes restantes produzem um (=). A variante Base64url, usada em JSON Web Tokens (JWTs), substitui + por - e / por _ para tornar a string compatível com URLs, e remove o preenchimento = inteiramente, pois os caracteres de preenchimento podem causar erros em parsers URI estritos. Reconhecer essa distinção é importante ao depurar o tratamento de tokens: um JWT que parece malformado pode simplesmente estar codificado em Base64url em vez de Base64 padrão.

Assinaturas JWT: HS256, RS256 e confusão de algoritmos

A segurança de um JSON Web Token depende inteiramente de sua assinatura, o terceiro segmento separado por ponto. Com HS256 (HMAC-SHA256), o servidor assina o cabeçalho e o payload codificados em Base64url usando uma chave secreta. A função de hash SHA-256 oferece resistência a colisões: é computacionalmente inviável produzir um payload modificado que gere a mesma assinatura sem conhecer a chave secreta. Com RS256, o servidor assina usando uma chave privada RSA e verifica com uma chave pública. Uma vulnerabilidade conhecida chamada confusão de algoritmos surge quando uma biblioteca do servidor não impõe estritamente o tipo de algoritmo esperado. Um atacante pode alterar o campo alg do cabeçalho do token de RS256 para HS256 e assinar o token usando a chave pública do servidor como segredo HMAC, já que as chaves públicas costumam ser acessíveis. Decodificar o cabeçalho do JWT localmente no navegador permite verificar qual algoritmo está de fato especificado, sem expor o token ativo a sistemas de registro de terceiros.

Ferramentas neste artigo

Perguntas frequentes

Base64 ou codificação de URL é uma forma de segurança?

Não. Ambas são codificações reversíveis projetadas para o transporte seguro de dados, não para protegê-los. Qualquer um que consiga ler a string codificada a decodifica instantaneamente, sem chave nem senha. Se precisa manter um valor confidencial, criptografe-o com um algoritmo adequado e gerencie a chave separadamente. Trate qualquer valor em Base64 ou codificado por porcentagem como se estivesse escrito em texto claro.

Por que importa onde eu decodifico um token ou calculo o hash de uma senha?

Porque a entrada é a parte sensível. Um JWT válido é uma credencial viva, e a senha cujo hash você calcula é o segredo real. Uma ferramenta baseada em servidor recebe essa entrada em bruto antes mesmo de devolver um resultado, o que significa que uma cópia pode ser registrada ou retida em algum lugar que você não vê. Uma ferramenta que roda no seu navegador realiza a mesma operação na memória da sua própria máquina, então o token ou a senha nunca são enviados a lugar nenhum.