Funções hash explicadas
Uma função hash transforma qualquer entrada em uma impressão digital curta e de comprimento fixo. Este guia explica para que MD5, SHA-1 e SHA-256 são úteis, onde deixam a desejar e como comparar um arquivo com um checksum publicado.
O que é um hash
Uma função hash criptográfica lê dados de qualquer tamanho e produz um resumo (digest) de comprimento fixo: 128 bits no MD5, 160 bits no SHA-1 e 256 bits no SHA-256, geralmente mostrado como texto hexadecimal. A mesma entrada gera sempre o mesmo resumo, e alterar mesmo um único bit da entrada produz um resumo muito diferente. Um hash é de mão única: não é possível recuperar a entrada a partir do resumo, a não ser adivinhando entradas e comparando os resultados.
Este guia traz informações gerais. Para decisões de segurança, siga os requisitos da sua organização ou do serviço com que você está trabalhando.
Checksums e integridade
O uso mais comum no dia a dia é verificar se um arquivo chegou íntegro. Uma página de download pode publicar um valor SHA-256 ao lado do arquivo. Depois de baixar, você calcula o hash da sua cópia e o compara com o publicado. Se os valores conferem, é muito provável que o arquivo seja idêntico ao que o publicador usou para calcular o hash; se diferem, o download está corrompido ou o arquivo é outra versão.
Um checksum só ajuda se o próprio valor publicado for confiável. Se um invasor puder alterar o arquivo e o checksum na mesma página, um hash que confere prova pouca coisa. As assinaturas digitais resolvem esse problema.
Por que MD5 e SHA-1 não servem para segurança
Um hash seguro deve tornar inviável encontrar duas entradas diferentes com o mesmo resumo (uma colisão). Já foram publicados ataques de colisão práticos tanto contra o MD5 quanto contra o SHA-1, então um invasor pode preparar dois arquivos diferentes que compartilham o mesmo hash. Por isso, eles não são mais considerados adequados para assinaturas digitais, certificados ou outros usos de segurança.
MD5 e SHA-1 ainda conseguem detectar corrupção acidental, e alguns sistemas mais antigos os publicam. Em trabalhos novos, o SHA-256 ou outro membro da família SHA-2 (SHA-384, SHA-512) é a escolha usual.
| Algoritmo | Comprimento do resumo | Situação de segurança |
|---|---|---|
| MD5 | 128 bits (32 caracteres hex) | Quebrado para colisões; só checksums legados |
| SHA-1 | 160 bits (40 caracteres hex) | Quebrado para colisões; uso legado |
| SHA-256 | 256 bits (64 caracteres hex) | Amplamente usado e recomendado |
| SHA-384 / SHA-512 | 384 / 512 bits | Amplamente usados e recomendados |
Hash não é criptografia, e senhas precisam de mais
A criptografia é reversível com a chave certa; o hash não foi feito para ser revertido. Mas um hash não esconde entradas curtas ou previsíveis: qualquer pessoa pode calcular o hash de palavras comuns ou números de telefone e procurar uma correspondência.
Por isso, hashes rápidos como MD5 ou SHA-256, sozinhos, não são adequados para armazenar senhas. Eles foram projetados para ser rápidos, o que permite a um invasor testar um número muito grande de tentativas rapidamente. O armazenamento de senhas usa algoritmos lentos e com salt, feitos para esse fim, como Argon2, scrypt ou bcrypt. Se você desenvolver um sistema de login, use uma biblioteca mantida e as orientações atuais da sua plataforma em vez de um hash de uso geral.
HMAC para autenticação de mensagens
Um hash simples mostra se os dados mudaram, mas qualquer pessoa pode recalculá-lo. O HMAC (código de autenticação de mensagem baseado em hash) combina os dados com uma chave secreta, por exemplo HMAC-SHA256. Só quem conhece a chave pode gerar o valor correto, então o destinatário pode verificar se uma mensagem veio de quem tem a chave e não foi alterada. Webhooks e a assinatura de requisições de API costumam usar HMAC. Mantenha a chave em segredo; qualquer pessoa que a tenha pode criar códigos válidos.
Por que o mesmo texto gera um hash diferente
Um hash é calculado sobre bytes, e não sobre o texto que você vê. Estas diferenças mudam o resultado:
- Finais de linha: o Windows usa CR LF, enquanto o Linux e o macOS usam LF.
- Codificação de caracteres: "é" corresponde a bytes diferentes em UTF-8 e em codificações mais antigas.
- Uma quebra de linha ou um espaço no final, ou uma marca de ordem de bytes (BOM) no início de um arquivo.
- Maiúsculas vs minúsculas na entrada.
Quando um hash não confere, verifique esses pontos primeiro. Calcular o hash do arquivo original costuma ser mais confiável do que calcular o hash de um texto copiado dele. A saída hex em si não diferencia maiúsculas de minúsculas: A1B2 e a1b2 são o mesmo valor.
Perguntas frequentes
Posso descriptografar um hash MD5 ou SHA-256?
Não. Um hash não é um dado criptografado. Os serviços on-line de "descriptografia" procuram hashes pré-calculados de entradas comuns, e é por isso que hashes de valores simples oferecem pouca proteção.
Qual algoritmo devo usar para verificar um download?
Use o que o publicador fornece. Se houver vários, SHA-256 ou SHA-512 é uma escolha melhor do que MD5 ou SHA-1.
O Gerador de hash envia o meu arquivo?
O Gerador de hash do LeedyBox calcula os hashes no seu navegador, então o texto ou arquivo que você seleciona é processado no seu dispositivo.