Uma função hash recebe qualquer entrada — uma única letra, uma imagem de disco de 4 GB, um arquivo vazio — e devolve uma string de tamanho fixo chamada digest. A mesma entrada sempre dá o mesmo digest. Uma entrada diferente dá um digest completamente diferente. E não existe jeito de rodar a função ao contrário para tirar a entrada de volta. É essa a ideia toda: uma impressão digital curta e estável que identifica os dados sem contê-los.
Dê a palavra hash ao SHA-256 e você recebe 64 caracteres hexadecimais. Dê a ele as obras completas de Shakespeare e você recebe 64 caracteres hexadecimais. Não dê nada a ele e você ainda recebe 64 caracteres hexadecimais, todos diferentes entre si.
O que diferencia uma função hash de qualquer outra função
Cinco propriedades, e as duas últimas são as que separam um hash criptográfico de um hash barato:
- Determinística. Os mesmos bytes sempre produzem o mesmo digest, em qualquer máquina, em qualquer linguagem, em qualquer ano. Sem aleatoriedade, sem timestamp, sem salt escondido dentro.
- Tamanho fixo. O SHA-256 devolve 256 bits — 32 bytes, escritos como 64 caracteres hexadecimais — não importa se a entrada tinha um byte ou um gigabyte.
- Avalanche. Mude um bit da entrada e cerca de metade dos bits da saída viram. Os digests de hash e Hash não têm nada visível em comum. Não existe "quase", não existe correspondência parcial, não existe ordenar digests para achar arquivos parecidos.
- Mão única. Dado um digest, não se conhece nenhum método para encontrar uma entrada que o produza além de chutar entradas e calcular o hash delas.
- Resistente a colisões. Ninguém deveria conseguir construir duas entradas diferentes que compartilhem um digest.
A propriedade de avalanche fica mais fácil de acreditar depois que você vê. Digite uma frase no gerador de hash daqui, mude uma letra e todo digest da página é substituído por inteiro. Os cinco algoritmos também discordam completamente uns dos outros, o que vale a pena ver antes de você passar uma tarde se perguntando por que o seu checksum não bate com o de outra pessoa.
Por que dois arquivos podem compartilhar um hash, e por que isso não é problema
Existem infinitas entradas possíveis e exatamente 2256 digests SHA-256 possíveis. Colisões não são uma falha de design; são uma certeza matemática. A afirmação de segurança é mais estreita e mais estranha: colisões existem, e ninguém consegue encontrar uma.
Para o SHA-256 o número relevante não é 2256 e sim mais ou menos 2128, o ponto em que o problema do aniversário dá uma chance de cinquenta por cento de dois digests aleatórios colidirem. São cerca de 340 undecilhões de tentativas. Não é um número que alguém alcance.
O que importa na prática é a diferença entre dois tipos de quebra. Uma colisão significa que um atacante constrói duas entradas com o mesmo digest e escolhe as duas, o que serve para enfiar um segundo documento por baixo de uma assinatura. Uma pré-imagem significa que ele parte de um digest que você já tem e encontra algo que bate com ele. Colisões são bem mais fáceis de achar, e é por isso que MD5 e SHA-1 caíram por ataques de colisão muito antes de alguém chegar perto de uma pré-imagem em qualquer um dos dois.
Para que as pessoas realmente usam hashes
- Conferir se um arquivo chegou inteiro. Calcule o hash do download, compare com o checksum na página do projeto, e uma transferência truncada ou um mirror ruim aparecem na hora.
- Nomear conteúdo pelo que ele é. O Git identifica cada commit, tree e arquivo pelo digest, então dois arquivos idênticos viram automaticamente um objeto só. Sistemas de backup e chaves de cache de CDN funcionam do mesmo jeito.
- Provar que você sabia de algo antes. Publique agora o hash da sua resposta, revele a resposta depois, e qualquer um pode conferir que você não mudou nada no meio do caminho. Esse é o jeito honesto de fazer um sorteio em público: a mecânica está em como sortear um ganhador de forma justa.
- Autenticar uma mensagem. O HMAC combina um hash com um segredo compartilhado para que quem recebe saiba que a mensagem não foi alterada e veio de alguém com a chave. Os códigos de seis dígitos do seu app autenticador são saída de HMAC truncada em seis dígitos, e é por isso que esses códigos 2FA mudam a cada trinta segundos sem o app falar com nada.
Fora isso, o "hash" de tabela hash quer dizer algo relacionado, mas bem mais fraco. Essas funções existem para espalhar chaves pelos buckets de forma rápida e uniforme, e são trivialmente reversíveis por design. Nunca recorra a uma delas quando você precisar das garantias criptográficas acima, e nunca recorra ao SHA-256 para indexar um dicionário.
O que um hash não é
Não é criptografia
Criptografia é uma viagem de ida e volta: uma chave transforma o texto puro em texto cifrado e a mesma chave o transforma de volta. O hashing não tem chave nem caminho de volta. O digest de um arquivo de 4 GB tem 32 bytes, ou seja, quase toda a informação foi jogada fora, não escondida. Se você precisa ler os dados de novo mais tarde, o que você queria era criptografia com uma senha, não um digest. Quem "passa um hash" numa mensagem para mandá-la em segredo apenas destruiu a mensagem.
Não torna privado um dado pequeno e previsível
Calcular o hash de um endereço de e-mail, de um número de telefone ou de um número de documento de identidade não anonimiza nada. O atacante não precisa reverter coisa alguma: ele calcula o hash de todos os valores possíveis e procura o seu. A quantidade de números de telefone é limitada. Tabelas pré-computadas deixam isso ainda mais barato. Um hash só esconde uma entrada que já era impossível de adivinhar desde o começo.
É a ferramenta errada para guardar senhas sozinha
Um SHA-256 puro de uma senha é rápido de calcular, e é exatamente esse o problema: uma GPU moderna testa bilhões de candidatas por segundo. Guardar senhas exige um salt por usuário, para que uma tabela só não consiga atacar todas as contas de uma vez, e uma função feita de propósito para ser lenta. bcrypt, scrypt e Argon2 — este último escolhido pela Password Hashing Competition em 2015 — são as que devem ser usadas. Nenhum dos cinco algoritmos da ferramenta acima tem lugar perto de um banco de dados de senhas.
Qual algoritmo você deve usar?
| Algoritmo | Digest | Veredito |
|---|---|---|
| SHA-256 | 64 caracteres hex | O padrão. Nenhum ataque prático conhecido. |
| SHA-512 | 128 caracteres hex | Mesma família, palavras de 64 bits. Costuma ser mais rápido em hardware de 64 bits. |
| SHA-3 | varia | Um design interno diferente, padronizado em 2015. Um seguro, não um upgrade. |
| SHA-1 | 40 caracteres hex | Colisões demonstradas pelo CWI Amsterdam e pelo Google em 2017. Não use para assinaturas. |
| MD5 | 32 caracteres hex | Colisões desde 2004, segundos em um notebook. Só para checksums legados. |
Escolha SHA-256 a menos que algo obrigue você a outra coisa. O NIST anunciou em dezembro de 2022 que o SHA-1 deve sair de uso até o fim de 2030, e o prazo é generoso: ele já está impróprio para assinaturas há anos. MD5 e SHA-1 ainda pegam um download corrompido, porque ninguém tem um ataque de pré-imagem prático contra nenhum dos dois, e continuam não oferecendo proteção nenhuma contra quem controlava o arquivo desde o início.
O que um checksum que bate realmente prova
Ele prova que os bytes que você tem são os bytes que quem publicou aquele checksum estava descrevendo. Isso é menos do que parece. Se o link de download e o checksum estão na mesma página, um atacante que trocou o arquivo trocou o número embaixo dele na mesma edição. Você verificou o arquivo contra ele mesmo.
Autenticidade de verdade exige uma assinatura: um digest assinado com uma chave em que você já confia, conferido com algo como gpg --verify. O hash continua fazendo o trabalho ali dentro — assinar 32 bytes é barato onde assinar um gigabyte não é — mas a confiança vem da chave, não do digest. Um checksum sozinho é uma verificação de consistência. Trate-o como tal e ele é genuinamente útil.
Se você quer ver isso tudo em vez de aceitar de fé, o gerador de hash produz os cinco digests de uma vez para texto ou para um arquivo, e aceita um checksum publicado para comparar, assim você não precisa ler 64 caracteres hexadecimais em duas telas. Nada é enviado: o arquivo é lido e hasheado na sua própria máquina.
A propriedade de mão única só vale quando a entrada era impossível de adivinhar, o que transforma "dá para reverter esse hash?" em uma pergunta completamente diferente sobre quantas candidatas um atacante consegue testar. Quanto tempo levaria para quebrar sua senha percorre a aritmética, e a distância entre o melhor e o pior caso é maior do que a maioria imagina.
Perguntas frequentes
O que é uma função hash em termos simples?
É uma função que transforma qualquer quantidade de dados em uma string curta e de tamanho fixo chamada digest. A mesma entrada sempre dá o mesmo digest, e mudar um único caractere da entrada muda o digest inteiro. Você não consegue voltar do digest para os dados originais.
Qual é a diferença entre hashing e criptografia?
Criptografia é reversível: uma chave transforma os dados em texto cifrado e os transforma de volta. O hashing é de mão única e não tem chave, então os dados originais não podem ser recuperados de jeito nenhum. Use criptografia quando precisar ler os dados depois, e hashing quando só precisar conferir se duas coisas são idênticas.
Dá para reverter um hash?
Não diretamente. Um digest tem o mesmo tamanho não importa o tamanho da entrada, então a maior parte da informação não existe mais. Os sites de consulta parecem reverter hashes porque calculam de antemão o hash de bilhões de entradas prováveis e procuram uma correspondência, o que funciona contra valores curtos ou comuns e falha completamente contra valores longos e aleatórios.
Qual algoritmo de hash eu devo usar?
SHA-256, a menos que você tenha um motivo específico para não usar. Ele é rápido, está disponível em toda linguagem e navegador, e não tem nenhum ataque prático contra ele. SHA-512 é uma alternativa razoável e costuma ser mais rápido em hardware de 64 bits apesar da saída mais longa.
Por que o MD5 não é mais seguro?
Dois arquivos diferentes podem ser fabricados para produzir o mesmo digest MD5 em segundos com hardware comum, uma técnica publicada em 2004. Isso quebra qualquer uso em que um digest faz as vezes de um documento, como uma assinatura. O MD5 ainda detecta um download corrompido por acidente, porque encontrar uma entrada para um digest que você não escolheu continua impraticável.
É seguro guardar senhas com hash SHA-256?
Não. O SHA-256 foi feito para ser rápido, e uma placa de vídeo consegue testar bilhões de tentativas por segundo contra ele. Guardar senhas exige um salt por usuário e uma função deliberadamente lenta como bcrypt, scrypt ou Argon2.
Última atualização 19 de setembro de 2026