AZ Tools
← Guias

Hashing vs criptografia vs codificação: qual é a diferença

Hashing, criptografia e codificação soam intercambiáveis e são misturados o tempo todo, mas resolvem três problemas completamente diferentes. Confundi-los gera falhas de segurança reais — como 'criptografar' uma senha que deveria ser hasheada, ou tratar o Base64 como se fosse secreto. Este guia traça as linhas com clareza para você sempre escolher o certo.

Codificação: tornar os dados seguros para transporte

A codificação transforma os dados em outro formato para que possam trafegar por um sistema que espera um formato específico. Base64, codificação por porcentagem de URL e entidades HTML são todas codificações. Não há chave nem segredo: qualquer um pode reverter uma codificação, e esse é justamente o ponto — o receptor precisa decodificá-la.

Use a codificação quando o objetivo é compatibilidade, não sigilo: colocar binário num campo JSON, levar um valor com segurança numa URL ou embutir uma imagem como URI data:. Se você algum dia pensar numa codificação como algo que 'protege' os dados, esse é o sinal de alerta de que escolheu a ferramenta errada.

Criptografia: manter os dados secretos mas recuperáveis

A criptografia embaralha os dados com uma chave para que só quem tenha a chave certa possa voltá-los ao original. É bidirecional por design — criptografar com a chave, descriptografar com a chave (ou seu par). A segurança recai inteiramente em manter a chave secreta, não em esconder o algoritmo.

Use a criptografia quando precisa armazenar ou enviar algo privado que depois deve poder ser lido: uma mensagem em trânsito (HTTPS), arquivos em repouso ou uma coluna de banco de dados com dados pessoais sensíveis. A característica definidora é a recuperabilidade: por design, o original pode ser recuperado — por quem detém a chave.

Hashing: uma impressão digital unidirecional

O hashing passa os dados por uma função unidirecional que produz um resumo de comprimento fixo. A mesma entrada sempre dá o mesmo hash, mas não há chave nem volta — você não pode derivar a entrada a partir da saída. Um bom hash criptográfico também torna inviável encontrar duas entradas com o mesmo resumo.

Use o hashing para verificar, não para recuperar: checar se um download não foi adulterado, comparar dois arquivos ou de-duplicar conteúdo. Por ser irreversível, o hashing é exatamente o que você quer quando nunca precisa do original de volta — apenas confirmar se algo combina com ele.

O exemplo da senha que une tudo

As senhas são onde os três colidem e onde os erros são mais danosos. Você nunca deve criptografar uma senha armazenada, porque a criptografia é reversível — quem roubar a chave obtém todas as senhas. Em vez disso, você a hasheia, de modo que um vazamento revele apenas resumos, não as senhas.

Mas um simples hash SHA-256 é rápido demais: um atacante pode tentar bilhões de palpites por segundo. Por isso o hashing de senhas usa um algoritmo deliberadamente lento e com sal, como bcrypt, scrypt ou Argon2. O sal faz senhas idênticas serem hasheadas de forma diferente, e a lentidão encarece o adivinhar em massa. A codificação não tem papel algum aqui.

Um guia rápido de decisão

Quando estiver em dúvida sobre qual precisa, pergunte o que está tentando alcançar e escolha de acordo.

  • Precisa enviar/armazenar dados e ler o valor exato depois, de forma privada? Criptografia.
  • Precisa apenas verificar se os dados combinam, nunca recuperá-los? Hashing — e para senhas, um hash lento com sal (bcrypt/Argon2).
  • Precisa mover dados intactos por um canal só de texto ou só de URL? Codificação (Base64, codificação de URL) — nunca para sigilo.
  • Precisa provar que uma mensagem veio de alguém com uma chave compartilhada? Um HMAC, que combina um hash com uma chave secreta.

Ferramentas relacionadas