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.