Se já descarregaste um programa e junto ao link aparecia uma cadeia como e3b0c44298fc1c149afbf4c8996fb924…, isso era um hash. Os hashes estão em todo o lado: no Git, nas assinaturas das APIs, nas chaves de cache, nas palavras-passe… Mas nem todos servem para o mesmo, e usar o errado pode abrir uma falha de segurança.
O que é uma função hash
Uma função hash recebe um texto ou ficheiro de qualquer tamanho e devolve uma impressão digital de tamanho fixo. Tem três propriedades essenciais:
- Determinística: a mesma entrada produz sempre o mesmo hash.
- Efeito avalanche: mudar um único carácter muda o hash por completo.
- Unidirecional: a partir do hash não é possível reconstruir a entrada.
Por exemplo, o SHA-256 de olá e o de Olá não se parecem em nada, embora só mude uma maiúscula. Experimenta no gerador de hash: calcula MD5, SHA-1 e SHA-256 ao mesmo tempo, no teu browser.
As três funções, lado a lado
| MD5 | SHA-1 | SHA-256 | |
|---|---|---|---|
| Tamanho | 128 bits (32 caracteres hex) | 160 bits (40 hex) | 256 bits (64 hex) |
| Ano | 1992 | 1995 | 2001 |
| Colisões práticas | Sim, desde 2004 | Sim, desde 2017 | Nenhuma conhecida |
| Seguro hoje? | Não | Não | Sim |
Uma colisão é encontrar duas entradas diferentes com o mesmo hash. No MD5 podem gerar-se em segundos num computador normal; no SHA-1, a Google e o CWI publicaram em 2017 a primeira colisão prática (o ataque «SHAttered»): dois PDF diferentes com o mesmo hash. Para o SHA-256 não se conhece nenhuma.
Para que serve cada um hoje
MD5: só contra acidentes, nunca contra atacantes
O MD5 continua útil para verificar que um ficheiro não se corrompeu por acidente (uma transferência incompleta, um disco com erros) ou para gerar chaves de cache e eliminar duplicados. É rápido e está disponível em todo o lado. O que não deves fazer é confiar no MD5 quando alguém pode manipular o ficheiro de propósito: um atacante consegue fabricar outro ficheiro com o mesmo hash.
SHA-1: em retirada
O Git usou o SHA-1 durante anos para identificar commits e está a migrar para o SHA-256. Os certificados TLS com SHA-1 deixaram de ser aceites há muito. Se o encontrares num sistema antigo, planeia a migração; não o escolhas para nada novo.
SHA-256: a opção por defeito
É o padrão atual para verificar transferências, assinar dados, calcular impressões digitais de certificados ou identificar conteúdo de forma única. Se precisas de «um hash» e não sabes qual, escolhe o SHA-256.
O erro mais grave: usá-los para palavras-passe
Nem o MD5, nem o SHA-1, nem sequer o SHA-256 são adequados para guardar palavras-passe. O problema não é poderem ser «decifrados», mas serem demasiado rápidos: uma placa gráfica atual calcula milhares de milhões de hashes por segundo, por isso testar todas as palavras-passe comuns contra uma base de dados roubada demora minutos. Além disso, sem «sal», dois utilizadores com a mesma palavra-passe têm o mesmo hash, e existem tabelas pré-calculadas (rainbow tables) com milhões de hashes de palavras-passe habituais.
Para palavras-passe usam-se funções lentas de propósito e com sal:
- Argon2id (a recomendação atual da OWASP)
- bcrypt
- scrypt
- PBKDF2 com muitas iterações, se precisares de cumprir FIPS
E a melhor defesa começa na própria palavra-passe: uma longa e aleatória, como as do gerador de senhas, resiste mesmo que o hash seja divulgado.
Hash não é cifra (nem Base64)
Três conceitos que se confundem muitas vezes:
- Hash: unidirecional. Não há forma de voltar atrás.
- Cifra: bidirecional com uma chave. Quem tiver a chave recupera o original.
- Codificação (Base64): bidirecional sem chave. Qualquer pessoa a pode descodificar; só muda o formato. Podes comprová-lo com o codificador Base64.
Se queres confirmar que uma mensagem vem de quem diz vir (por exemplo, um webhook), um hash simples não chega: precisas de um HMAC, que combina o hash com uma chave secreta. O gerador HMAC calcula assinaturas HMAC-SHA256 para verificar essas integrações.
Resumo rápido
- Verificar que uma transferência não está corrompida? SHA-256 (ou MD5 se for o único que o fornecedor publica).
- Chave de cache ou eliminação de duplicados interna? MD5 ou SHA-256, tanto faz.
- Assinar ou verificar mensagens entre sistemas? HMAC-SHA256.
- Guardar palavras-passe? Argon2id ou bcrypt. Nunca MD5, SHA-1 ou SHA-256 simples.

