Como gerar hashes MD5, SHA-256 e outros

· 9 min de leitura

O hashing converte qualquer entrada (uma palavra-passe, um ficheiro, uma mensagem) numa string de caracteres de comprimento fixo. A mesma entrada produz sempre o mesmo hash, mas mesmo uma alteração minúscula na entrada produz um hash completamente diferente. Isto torna o hashing essencial para verificação de integridade, armazenamento de palavras-passe, assinaturas digitais, provas blockchain e dezenas de outros blocos de construção da computação moderna. Escolher o algoritmo certo, saber porque alguns estão partidos e reconhecer os padrões que usam mal os hashes transforma uma ferramenta de cinco segundos numa base sobre a qual pode construir com segurança.

Uma breve história das funções de hash

O hashing como ideia de programação antecede a criptografia em décadas, as tabelas de hash em estruturas de dados usam funções simples como CRC e FNV para distribuir chaves por buckets. Os hashes criptográficos, desenhados para serem irreversíveis e resistentes a colisões, emergiram no final dos anos 80 com o MD4 (1990) e o MD5 (1991) de Ron Rivest. O MD5 tornou-se o padrão de facto durante duas décadas, antes de colisões práticas o tornarem inseguro para trabalho de segurança.

O SHA-0 (1993) do NIST foi retirado quase imediatamente e substituído por SHA-1 (1995). O SHA-1 aguentou melhor mas caiu por etapas: ataques teóricos em 2005, um cenário prático de falsificação de certificado por 2009, e a demonstração SHAttered da Google em 2017, dois PDF diferentes com o mesmo hash SHA-1. A família SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512), publicada em 2001, foi desenhada como substituta a longo prazo e continua segura hoje. O SHA-3 (Keccak, padronizado em 2015) é um desenho estruturalmente diferente, pensado para servir de alternativa se o SHA-2 alguma vez cair.

Em paralelo, os hashes específicos para palavras-passe evoluíram em separado. O MD5 ou SHA-1 puros revelaram-se demasiado rápidos para armazenamento de palavras-passe, por isso o bcrypt (1999), o scrypt (2009) e o Argon2 (2015, vencedor da Password Hashing Competition) acrescentaram lentidão deliberada e dureza de memória, tornando os ataques de força bruta ordens de grandeza mais caros. O hash certo para uma palavra-passe nunca é o mesmo que o hash certo para uma checksum de ficheiro.

Como funciona o hashing

Uma função de hash recebe uma entrada de qualquer tamanho e produz uma saída de tamanho fixo:

EntradaHash SHA-256 (primeiros 16 car.)
hello2cf24dba5fb0a30e...
Hello185f8db32271fe25...
hello!ce06092fb948d9ff...

Note que alterar um único caractere (h minúsculo para H maiúsculo) ou acrescentar um caractere altera completamente o hash. A isto chama-se o efeito avalanche e é o que torna os hashes úteis para detetar qualquer alteração, por mais minúscula que seja.

Internamente, uma função de hash moderna divide a sua entrada em blocos de tamanho fixo (64 bytes para SHA-256, 128 para SHA-512), passa cada bloco por uma função de compressão e encadeia o estado para a frente. A saída é o estado final depois de o último bloco ter sido misturado. Como a cadeia depende de cada byte, não há atalho que permita a um atacante alterar a entrada sem reescrever o hash todo.

Um bom hash criptográfico tem três propriedades de segurança: resistência à pré-imagem (não consegue encontrar uma entrada que produza um determinado hash), resistência à segunda pré-imagem (dada uma entrada, não consegue encontrar outra diferente com o mesmo hash) e resistência a colisões (não consegue encontrar duas entradas distintas com o mesmo hash). O MD5 falha as três; o SHA-1 falha a resistência a colisões; o SHA-2 e o SHA-3 ainda mantêm as três.

Algoritmos de hash comuns

AlgoritmoBits de saídaComprimentoEstadoUsar para
MD512832 hexPartido (inseguro)Checksums legadas, usos sem segurança
SHA-116040 hexPartido (inseguro)Apenas sistemas legados
SHA-22422456 hexSeguro (de nicho)Preferir SHA-256
SHA-25625664 hexSeguroIntegridade de ficheiro, assinaturas digitais
SHA-38438496 hexSeguroSuites de cifra TLS 1.3
SHA-512512128 hexSeguroApps de alta segurança, desempenho 64 bits
SHA3-25625664 hexSeguroAlternativa à prova de futuro do SHA-256
BLAKE2b / BLAKE3256 ou 512variávelSeguro, muito rápidorsync, restic, hashing em massa
HMAC-SHA25625664 hexSeguroAssinatura de pedidos API
bcrypt18460 car. (personalizados)Seguro para palavras-passeArmazenamento de palavras-passe
Argon2idconfigurávelvariávelO melhor para palavras-passeArmazenamento moderno de palavras-passe
CRC32328 hexApenas deteção de erroNão é um hash de segurança

SHA-256 é o padrão atual para a maioria dos usos gerais. O MD5 e o SHA-1 só devem ser usados ao interagir com sistemas legados que os exijam; nunca para fronteiras de segurança. Para palavras-passe, use bcrypt ou Argon2id, não SHA-256 puro.

Como gerar um hash

  1. Escolha o seu algoritmo: selecione MD5, SHA-1, SHA-256, SHA-384 ou SHA-512 no dropdown. Use SHA-256 a não ser que tenha razão específica para escolher outro.
  2. Introduza texto ou carregue um ficheiro: escreva ou cole texto na caixa de entrada, ou largue um ficheiro. A ferramenta executa o hash inteiramente no seu browser usando a API Web Crypto.
  3. Copie o hash: o resultado é uma string hex que pode usar para verificação, armazenamento ou comparação. Muitas ferramentas oferecem também codificação base64 para armazenamento compacto.
  4. Compare se necessário: cole o hash publicado ao lado do seu hash gerado e deixe a ferramenta assinalar o primeiro caractere que diverge. Comparar strings de 64 caracteres visualmente está sujeito a erros.

Usos práticos

Verificação de integridade de ficheiro: descarregue um ficheiro e compare o seu hash com o hash oficial do editor. Se coincidirem, o ficheiro é autêntico e não está corrompido. Este é o caso de uso que motiva a maioria das gerações diárias de hash, o fluxo por detrás de cada invocação de sha256sum em Linux e de cada página de checksums num download de software.

Armazenamento de palavras-passe, as aplicações armazenam hashes de palavras-passe, não as palavras-passe em si. Quando faz login, a sua entrada é hashada e comparada com o hash armazenado. O detalhe crucial é que o algoritmo tem de ser lento de propósito (bcrypt, Argon2) para que um atacante que roube o ficheiro de hashes não consiga forçá-lo em tempo razoável.

Deduplicação de dados: sistemas de armazenamento e ferramentas de backup fazem hash a pedaços de dados, muitas vezes blocos de alguns megabytes, e usam o hash como chave. Dois pedaços com o mesmo hash assumem-se idênticos, portanto a segunda ocorrência guarda apenas um apontador. Ferramentas como restic, borg e muitos serviços de backup na cloud dependem disto.

Assinaturas digitais: uma assinatura digital é um hash cifrado com uma chave privada. O verificador faz hash ao documento, decifra a assinatura com a chave pública e confirma que ambos coincidem. Isto prova tanto que o documento não mudou como que o signatário aprovou esta versão exata.

HMAC para segurança de API: HMAC combina uma função de hash com uma chave secreta, produzindo uma etiqueta que qualquer pessoa com a mesma chave consegue verificar. Webhooks, assinatura de pedidos AWS e muitas RPC internas usam HMAC-SHA256 para que o recetor saiba que o pedido veio realmente de uma fonte confiável.

Blockchain e árvores Merkle: criptomoedas, armazenamento endereçável por conteúdo (IPFS) e Git usam todos árvores de hash para se comprometerem com grandes conjuntos de dados através de um único hash raiz. Mude um byte em qualquer ponto da árvore e o hash raiz muda, é essa a propriedade que torna os dados à prova de adulteração.

Chaves de cache: sistemas de cache fazem hash a URLs de pedido ou parâmetros para produzir uma chave de lookup compacta. CRC e SipHash são comuns aqui porque priorizam velocidade sobre garantias criptográficas.

Hash vs HMAC vs assinatura digital

Estes três conceitos são frequentemente confundidos por produzirem todos strings hex com aspeto semelhante.

ConceitoEntradasVerificaUso comum
HashDadosOs dados não mudaram desde que o hash foi calculadoChecksums, endereçamento por conteúdo
HMACDados + segredo partilhadoDados inalterados E criados por alguém com o segredoAssinatura de pedidos API, webhooks
Assinatura digitalDados + chave privadaDados inalterados E assinados por uma chave específicaCertificados TLS, assinatura de software
CifragemDados + chave (qualquer)Os dados foram mantidos secretos em trânsitoConfidencialidade (não integridade só)

Um hash puro não prova nada sobre quem o criou. HMAC prova que o emissor tinha o segredo partilhado. Uma assinatura identifica adicionalmente o signatário sem precisar de partilhar o segredo. Escolha a ferramenta mais fraca que resolve o seu problema real.

Armadilhas comuns

Ferramentas e bibliotecas alternativas

O gerador de hash no browser é o caminho mais rápido para hashes pontuais. Para uso repetido ou scripts, as ferramentas de linha de comandos e bibliotecas de linguagem tomam conta.

FerramentaPlataformaForçaA vigiar
Gerador de hash webBrowserInstantâneo, sem instalação, sem uploadUma entrada de cada vez
sha256sum, md5sumLinuxScriptável, GNU coreutils--check lê ficheiros SHA256SUMS
shasum -a 256macOS, BSDIncluído no SONome de binário diferente do Linux
Get-FileHashWindows PowerShellDe primeira classe no WindowsFormato de saída difere de sha256sum
openssl dgst -sha256MultiplataformaSe já tiver OpenSSLMais lento que ferramentas dedicadas
b3sum / BLAKE3 CLIMultiplataformaDébito multi-GB/sMais recente, menos ubíquo
Python hashlibPythonIncorporado, todos os algoritmos principaisMantenha-se em entrada em bytes
Node cryptoNode.jsIncorporado, API semelhante à do PythonStreaming para ficheiros grandes
Web Crypto subtle.digestJS no browserNativo, rápido, sem dependênciasSó API assíncrona
HashiCorp Vault / KMSCloudGestão centralizada de chaves para HMAC e assinaturaLock-in do fornecedor

Para palavras-passe, trate o ecossistema da linguagem de forma diferente: use bcrypt, argon2-cffi, passlib, ou o adaptador recomendado pela sua plataforma, nunca um ciclo SHA artesanal.

Privacidade e o gerador de hash

O gerador de hash corre inteiramente no seu browser. O texto que digita é hashado em memória com a interface SubtleCrypto da Web Crypto, e qualquer ficheiro que selecione é transmitido pela API FileReader sem upload. Não há registo das entradas hashadas, nem analítica sobre que algoritmos são populares, nem maneira de alguém reconstruir o que estava a verificar. Os hashes em si resumem frequentemente material sensível, palavras-passe, documentos internos, chaves privadas, exatamente o tipo de dados que nunca deve colar num formulário web estranho. Fazer o trabalho do lado do cliente mantém a entrada na sua máquina, onde pertence. Para uma tarefa tão rotineira como gerar uma checksum, o nível de privacidade por defeito deve ser: nada sai da página, nada é armazenado, nada é partilhado.

Perguntas frequentes

Qual a diferença entre MD5, SHA-1 e SHA-256?

MD5 produz um hash de 128 bits (32 caracteres hex), SHA-1 produz 160 bits (40 caracteres) e SHA-256 produz 256 bits (64 caracteres). MD5 e SHA-1 são considerados criptograficamente quebrados para fins de segurança. SHA-256 é atualmente seguro e recomendado para verificação de integridade e aplicações de segurança.

É possível reverter um hash para obter os dados originais?

Não. Funções de hash são unidirecionais por design. Você não pode matematicamente reverter um hash de volta para sua entrada. No entanto, senhas comuns podem ser encontradas em tabelas de busca pré-computadas (tabelas rainbow), por isso senhas devem receber salt antes do hashing.

O que é HMAC?

HMAC (Hash-based Message Authentication Code) combina uma função de hash com uma chave secreta. Ele verifica tanto a integridade quanto a autenticidade dos dados, provando que os dados não foram adulterados e que foram criados por alguém que conhece a chave secreta.

Meus dados são enviados a um servidor ao gerar hashes?

Não. Todo o hashing roda no seu navegador usando a Web Crypto API. Seu texto e arquivos nunca saem do seu dispositivo.

Why should I never use MD5 or SHA-1 for password storage even with a salt?

Both algorithms are extremely fast, which is the opposite of what you want for passwords. An attacker with a stolen hash file can try billions of guesses per second on a GPU. Password-hashing functions like bcrypt, scrypt, and Argon2 are deliberately slow and memory-hard, which forces attackers to spend orders of magnitude more time per guess.

When should I use SHA-512 instead of SHA-256?

On 64-bit CPUs, SHA-512 is often slightly faster than SHA-256 because its inner state and word size are tuned to 64-bit operations. Use SHA-512 when you want a longer digest (128 hex characters) for collision resistance margin, or when you are already in a SHA-512 ecosystem (TLS 1.3 with certain cipher suites, some HMAC implementations).