SHA-256 na Prática: O Que o Hash Resolve e o Que Não Resolve
6 min de leitura
Quer o número agora? Calcule o hash SHA-256, SHA-1, SHA-384 e SHA-512 de qualquer texto, em hexadecimal ou Base64.
Gerador de Hash SHA-256Hash é uma das ideias mais úteis da computação e uma das mais mal compreendidas. A confusão começa pelo vocabulário: muita gente diz "criptografar em SHA-256", e essa frase não faz sentido. Vale desfazer o nó, porque dele saem quase todos os erros práticos do assunto.
O que um hash faz
Uma função de hash criptográfico lê uma sequência de bytes de qualquer tamanho e devolve sempre a mesma quantidade de bits. O SHA-256 devolve 256 bits, que aparecem como 64 dígitos hexadecimais. Uma letra sozinha e um romance inteiro produzem resumos do mesmo tamanho.
Duas propriedades explicam tudo o que se faz com isso.
A primeira é o efeito avalanche. Mudar um único bit da entrada muda, em média, metade dos bits da saída — e o resultado não guarda nenhuma semelhança visível com o anterior:
| Texto | SHA-256 |
|---|---|
obtani | 3d51... (começo) |
obtanj | completamente diferente, sem um padrão reconhecível |
É por isso que hash serve para detectar alteração. Se um byte de um arquivo mudou, o resumo muda de forma escandalosa. Não existe "quase igual".
A segunda é a irreversibilidade. Como toda entrada possível precisa caber nos mesmos 256 bits, existem infinitos textos diferentes que produzem o mesmo resumo. Não há caminho de volta porque a volta não é única — a função joga informação fora de propósito.
Por isso "descriptografar SHA-256" não existe
Criptografia é reversível por construção: você cifra com uma chave e decifra com a mesma chave (ou com a chave par). O objetivo é guardar algo para ler depois.
Hash é o oposto: o objetivo é nunca ler de volta. Serve para comparar, não para armazenar.
Os sites que prometem "quebrar hash" fazem outra coisa: mantêm uma tabela gigante de textos comuns já
calculados e procuram o seu resumo nela. Eles acertam 123456, senha123 e qualquer palavra de
dicionário — e nunca vão acertar uma frase que você escreveu. Não é reversão; é busca numa lista.
O que o hash resolve de verdade
- Integridade de arquivo. Você baixa uma imagem de sistema de 5 GB e o site publica o SHA-256 esperado. Se bater, o arquivo chegou inteiro. Se não bater, algo se corrompeu no caminho — ou alguém trocou o arquivo.
- Comparação barata. Comparar dois hashes de 64 caracteres é instantâneo; comparar dois arquivos de gigabytes, não. Sistemas de backup e de deduplicação vivem disso.
- Identificação de conteúdo. O Git identifica cada commit pelo hash do seu conteúdo. Se o conteúdo mudar, o identificador muda — é essa propriedade que torna o histórico auditável.
- Verificação sem revelar. Você pode provar que sabe um valor publicando o hash dele antes, e o valor depois. É a base de esquemas de compromisso.
A causa número um de "meu hash não bate"
Esta merece uma seção própria, porque é de longe o problema mais frequente — e quase nunca é erro de cálculo.
O hash trabalha sobre bytes, não sobre letras. A conversão de letras em bytes depende da codificação, e codificações diferentes produzem bytes diferentes para o mesmo texto:
| Codificação de “ação” | Bytes | Resultado |
|---|---|---|
| UTF-8 (padrão da web) | 6 | um resumo |
| latin-1 (ISO-8859-1) | 4 | outro resumo, sem relação com o primeiro |
A palavra tem quatro caracteres nos dois casos. O que muda é que, em UTF-8, o ç e o ã gastam dois
bytes cada. Seis bytes contra quatro: entradas diferentes, saídas diferentes.
Se você compara o resultado de duas ferramentas e elas discordam, verifique nesta ordem:
- A codificação. Se o texto tem acento, cedilha ou emoji, é quase certo que a causa é esta. O gerador de hash mostra lado a lado quantos caracteres e quantos bytes o seu texto tem, justamente para essa diferença ficar visível.
- Uma quebra de linha invisível. Colar de um editor costuma trazer um
\nno fim. Ele é um byte, e muda tudo. - A representação. Hexadecimal e Base64 são o mesmo resumo escrito de dois jeitos. E cuidado com uma armadilha clássica: o Base64 correto é o dos bytes do resumo, não do texto hexadecimal passado por um conversor Base64. São valores diferentes.
SHA-1: quando ainda dá para usar
O SHA-1 está quebrado, e isso não é opinião. Em 23 de fevereiro de 2017, pesquisadores do CWI Amsterdam e do Google publicaram o ataque SHAttered: dois arquivos PDF diferentes, com conteúdos visivelmente distintos, e o mesmo SHA-1. O custo foi alto para a época — cerca de nove quintilhões de operações — mas milhares de vezes menor que a força bruta, e só barateou desde então.
O NIST anunciou em dezembro de 2022 a retirada do algoritmo, com prazo de 31 de dezembro de 2030 para os módulos criptográficos validados.
Mesmo assim, ele continua por aí. O Git identifica commits por SHA-1; repositórios antigos publicam checksums em SHA-1; sistemas legados esperam esse formato. Todos esses são casos em que não há adversário: ninguém está tentando construir dois arquivos com o mesmo resumo para te enganar. Para detectar corrupção acidental, o SHA-1 funciona.
A regra prática é simples: se existe alguém com interesse em te enganar, SHA-1 está fora. Se é só para conferir que um byte não virou outro no caminho, ele ainda serve — mas não há motivo para escolhê-lo em nada novo.
E o MD5?
Pior ainda. Colisões práticas desde 2004, colisões de prefixo escolhido desde 2007 — e essa segunda categoria foi usada de verdade: em 2012, o malware Flame forjou uma assinatura que parecia vir da Microsoft explorando exatamente isso. O MD5 nem existe na API criptográfica dos navegadores, o que é uma declaração de posição dos fabricantes.
Se você precisa conferir um MD5 antigo, use a ferramenta de linha de comando do seu sistema. Se está escolhendo um algoritmo hoje, use SHA-256 e não pense mais no assunto.
O que o hash não resolve
- Não guarda senha. É o assunto do próximo texto desta série, e o erro mais caro de todos: hash rápido é exatamente o que o atacante quer.
- Não protege segredo. Se o texto é curto e previsível, a tabela pronta encontra.
- Não autentica sozinho. Um hash publicado no mesmo servidor do arquivo não prova nada: quem trocou o arquivo troca o hash junto. Para autenticar é preciso assinatura ou um canal separado.
- Não é anonimização. Passar um CPF por SHA-256 não anonimiza nada: são 11 dígitos, e testar todos leva segundos.
Hash é uma ferramenta de comparação. Dentro desse escopo, é excelente — e é praticamente inquebrável quando o algoritmo é o certo. Fora dele, é a escolha errada com aparência de segurança, que é a pior combinação possível.