Se você trabalha com tecnologia, cedo ou tarde vai esbarrar nesses dois termos: hash e encriptação (ou criptografia). Muita gente usa as palavras como sinônimos, mas são conceitos completamente diferentes, com objetivos diferentes e usados em situações diferentes. Entender essa diferença é fundamental — inclusive para não cometer erros graves de segurança, como armazenar senhas de forma criptografada em vez de usar hash (um erro mais comum do que se imagina).
Neste post, vamos destrinchar os dois conceitos, entender como funcionam por baixo dos panos e ver exemplos práticos de quando usar cada um.
A diferença fundamental: reversibilidade
Antes de entrar em detalhes técnicos, fica a regra de ouro:
Encriptação é uma via de mão dupla. Hash é uma via de mão única.
- Quando você encripta um dado, a intenção é recuperá-lo depois. Existe uma chave que permite desfazer o processo.
- Quando você gera um hash de um dado, a intenção não é recuperá-lo. O hash serve como uma "impressão digital" daquele dado — útil para comparar, verificar ou identificar, mas nunca para reconstruir o original.
Com essa ideia em mente, vamos aprofundar em cada um.
Encriptação (Criptografia)
Encriptação é o processo de transformar uma informação legível (texto claro, ou plaintext) em uma informação ilegível (texto cifrado, ou ciphertext), usando um algoritmo matemático e uma chave. Quem possui a chave correta consegue reverter o processo (decriptação) e recuperar o dado original.
Tipos de encriptação
1. Criptografia simétrica
Usa a mesma chave para encriptar e decriptar. É rápida e eficiente, ideal para grandes volumes de dados.
- Exemplos de algoritmos: AES (Advanced Encryption Standard), ChaCha20, (o antigo DES, hoje obsoleto).
- Problema principal: como as duas partes (quem envia e quem recebe) compartilham a mesma chave, é preciso um jeito seguro de transmitir essa chave sem que ela seja interceptada.
2. Criptografia assimétrica
Usa um par de chaves: uma pública (que pode ser compartilhada livremente) e uma privada (que deve ser mantida em segredo). O que é encriptado com a chave pública só pode ser decriptado com a chave privada correspondente, e vice-versa.
- Exemplos de algoritmos: RSA, ECC (Elliptic Curve Cryptography).
- Vantagem: resolve o problema de troca de chaves da criptografia simétrica.
- Desvantagem: é significativamente mais lenta e custosa computacionalmente.
Na prática, muitos sistemas combinam as duas abordagens (criptografia híbrida): usam a assimétrica para trocar de forma segura uma chave simétrica, e depois usam a simétrica para encriptar o volume real de dados. É basicamente assim que o HTTPS funciona.
Para que serve a encriptação
- Proteger a confidencialidade de dados em trânsito (ex: tráfego HTTPS, mensagens de WhatsApp).
- Proteger dados armazenados (ex: disco criptografado, backups em nuvem).
- Garantir que só quem tem a chave correta consiga ler a informação.
Hash
Uma função hash pega um dado de qualquer tamanho e produz uma saída de tamanho fixo, chamada de "hash", "digest" ou "resumo criptográfico". Diferente da encriptação, não existe chave envolvida (nas funções hash tradicionais) e o processo é unidirecional: é computacionalmente inviável reverter um hash e obter o dado original.
Propriedades importantes de um bom algoritmo de hash
- Determinismo: a mesma entrada sempre produz a mesma saída.
- Efeito avalanche: uma pequena mudança na entrada (até um único bit) gera uma saída completamente diferente.
- Rapidez de cálculo: deve ser rápido de computar o hash a partir de uma entrada.
- Resistência à pré-imagem: dado um hash, deve ser inviável descobrir a entrada original.
- Resistência a colisões: deve ser extremamente difícil encontrar duas entradas diferentes que gerem o mesmo hash.
Algoritmos de hash comuns
- MD5: antigo e hoje considerado quebrado (vulnerável a colisões). Não deve ser usado para fins de segurança.
- SHA-1: também considerado inseguro atualmente.
- SHA-256 / SHA-3: parte da família SHA-2 e SHA-3, ainda considerados seguros e amplamente usados hoje.
- bcrypt, scrypt, Argon2: funções hash específicas para senhas, propositalmente lentas e configuráveis, para dificultar ataques de força bruta.
Para que serve o hash
- Verificação de integridade: ao baixar um arquivo grande, muitos sites publicam o hash SHA-256 do arquivo. Depois de baixar, você calcula o hash localmente e compara — se forem iguais, o arquivo não foi corrompido nem alterado.
- Armazenamento de senhas: sistemas bem projetados nunca guardam a senha do usuário, apenas o hash dela (idealmente com salt, um valor aleatório adicionado antes de gerar o hash, para evitar ataques com tabelas pré-computadas, os chamados rainbow tables).
- Estruturas de dados: tabelas hash (hash tables/hash maps), usadas para buscas rápidas em programação.
- Blockchain: cada bloco contém o hash do bloco anterior, garantindo a integridade de toda a cadeia.
- Deduplicação de dados: sistemas de armazenamento usam hashes para identificar arquivos duplicados sem comparar o conteúdo inteiro.
O erro clássico: confundir os dois
Um erro de segurança relativamente comum é encriptar senhas em vez de gerar hash delas. Por que isso é um problema?
- Se um sistema encripta senhas, isso significa que existe uma chave em algum lugar capaz de decriptá-las. Se essa chave vazar (ou se o próprio sistema for comprometido), todas as senhas dos usuários ficam expostas em texto claro.
- Se o sistema usa hash (com salt) para armazenar senhas, mesmo que o banco de dados vaze, um atacante não consegue reverter os hashes para descobrir as senhas originais — só conseguiria, na prática, tentar adivinhar senhas por força bruta, e algoritmos como bcrypt e Argon2 são desenhados justamente para tornar isso muito lento e caro.
Por isso a regra prática é: senha se compara com hash, dado sensível que precisa ser recuperado depois se encripta.
Resumo comparativo
| Característica | Encriptação | Hash |
|---|---|---|
| Reversível? | Sim, com a chave correta | Não |
| Usa chave? | Sim | Não (funções hash tradicionais) |
| Tamanho da saída | Proporcional à entrada | Fixo, independente da entrada |
| Objetivo principal | Confidencialidade | Integridade / identificação |
| Exemplo de algoritmo | AES, RSA | SHA-256, bcrypt |
| Uso típico | Proteger mensagens, arquivos, tráfego | Verificar integridade, armazenar senhas |
Conclusão
Encriptação e hash resolvem problemas diferentes, mesmo que ambos estejam sob o guarda-chuva da criptografia. Encriptação protege a confidencialidade de um dado que precisa ser recuperado depois. Hash gera uma impressão digital de um dado, útil para verificar integridade ou autenticidade, mas que nunca deve ser revertida — e nem pode, se o algoritmo for bem projetado.
Entender essa distinção não é só curiosidade técnica: é a base para tomar decisões corretas de segurança, seja escolhendo como armazenar senhas, como proteger dados sensíveis, ou como validar a integridade de um arquivo baixado da internet.