Gerador de hash

Gere de uma vez os hashes MD5, SHA-1, SHA-256, SHA-384 e SHA-512 do texto, em hex ou Base64; cole uma soma de verificação esperada para ver qual corresponde.

Entrada
MD5Quebrado
SHA-1Quebrado
SHA-256
SHA-384
SHA-512

O que uma função de hash faz realmente

Uma função de hash criptográfica recebe uma entrada de qualquer tamanho e produz uma cadeia de bytes de comprimento fixo — um digest, ou «hash». Dê-lhe uma única letra ou um romance inteiro: o MD5 devolve sempre 16 bytes e o SHA-256 sempre 32. A mesma entrada produz sempre o mesmo digest, e mudar um único bit em qualquer ponto da entrada altera cerca de metade dos bits de saída — por isso dois arquivos quase idênticos têm hashes completamente desligados um do outro.

A propriedade crucial é que a função só funciona num sentido. Calcular o hash de um arquivo é rápido; recuperar o arquivo a partir do hash não é apenas lento, é impossível por princípio, porque uma saída de comprimento fixo não consegue codificar uma entrada ilimitada. Um hash é uma impressão digital, não uma cópia cifrada — não há nada para decifrar.

Para que servem realmente os hashes

  • Verificar transferências: um projeto publica o SHA-256 de uma versão, você calcula o hash do arquivo recebido e digests iguais significam que os bytes chegaram intactos.
  • Detectar alterações: sistemas de controle de versão, backup e desduplicação comparam hashes em vez de arquivos inteiros, porque comparar 32 bytes é muito mais barato do que comparar gigabytes.
  • Subresource Integrity: uma página fixa o hash em Base64 de um script que carrega de uma CDN, e o navegador recusa-se a executá-lo se não corresponder.
  • Armazenar senhas — mas com uma função lenta feita para isso, nunca com um hash simples. Ver abaixo.

Repare no que têm em comum: o hash é um substituto compacto de algo maior, usado para responder à pergunta «isto é a mesma coisa que eu esperava?» sem transmitir nem armazenar a coisa em si.

MD5 e SHA-1 estão quebrados — o que isso significa na prática

Uma função de hash é considerada quebrada assim que alguém consegue construir uma colisão: duas entradas diferentes que produzem o mesmo digest. As colisões de MD5 calculam-se em hardware comum desde 2004, e em 2017 o ataque SHAttered produziu dois arquivos PDF diferentes com um hash SHA-1 idêntico. É por isso que ambos os algoritmos aparecem assinalados nesta ferramenta.

A consequência prática é mais estreita do que «nunca os use». Uma colisão significa que um atacante que controle os dois arquivos pode fazer um arquivo malicioso coincidir com o digest de um inofensivo, portanto MD5 e SHA-1 já não conseguem provar que um arquivo não foi adulterado por alguém hostil. Continuam perfeitamente úteis para detectar corrupção acidental — uma transferência truncada, um bit trocado num disco — e vai continuar a encontrá-los em sistemas antigos, em cabeçalhos ETag e em manifestos de pacotes antigos que ninguém vai reescrever.

A regra prática: se a pergunta é «isto danificou-se em trânsito?», o MD5 chega. Se a pergunta é «alguém substituiu isto de propósito?», use SHA-256 ou melhor.

Nunca gere o hash de uma senha com estes

MD5, SHA-1 e até SHA-256 são concebidos para serem rápidos, e a rapidez é exatamente a propriedade errada para armazenar senhas. Uma GPU moderna calcula milhares de milhões de hashes SHA-256 por segundo, por isso um banco de dados roubado de senhas simplesmente hasheadas pode ser atacado a uma escala enorme — e como a mesma senha produz sempre o mesmo digest, as tabelas pré-calculadas tornam o ataque ainda mais barato.

Armazenar senhas exige uma função deliberadamente lenta, com salt e exigente em memória: Argon2id, scrypt ou bcrypt. Acrescentam um salt aleatório único por senha, de modo que senhas iguais não compartilham digest, e o seu custo é ajustável, de modo que cada tentativa custa ao atacante tempo e memória reais. Esta ferramenta serve para somas de verificação e impressões digitais, não para gerar hashes de senhas.

Ler e comparar digests

O mesmo digest pode ser escrito de mais do que uma maneira. O hexadecimal em minúsculas é o que as ferramentas padrão de linha de comando imprimem, e é normalmente aquilo com que vai comparar:

md5sum file.iso                  # Linux
sha256sum file.iso               # Linux
shasum -a 256 file.iso           # macOS
Get-FileHash file.iso -Algorithm SHA256   # PowerShell (imprime em maiúsculas)
certutil -hashfile file.iso SHA256        # Windows (imprime em maiúsculas)

Em hexadecimal, maiúsculas ou minúsculas não têm significado nenhum — o PowerShell e o certutil imprimem em maiúsculas, as ferramentas Unix em minúsculas, e é exatamente o mesmo valor. É por isso que a caixa de comparação desta ferramenta ignora as maiúsculas em hexadecimal. Com o Base64 é outra história: é uma codificação mais densa dos mesmos bytes, usada pelo Subresource Integrity e por várias APIs, e aí as maiúsculas contam — por isso a comparação é exata.

Um último hábito que vale a pena criar: nunca compare dois digests longos a olho para decidir se coincidem. O olho humano é muito bom a ver aquilo que espera ver, e o fato de os primeiros e os últimos caracteres coincidirem não quer dizer nada. Cole o valor esperado e deixe a comparação ser exata.

Perguntas frequentes

O meu texto é enviado para um servidor?
Não. Cada digest é calculado no seu navegador — a família SHA através da Web Crypto API e o MD5 através de JavaScript rodando na sua própria máquina. Nada do que escrever sai do seu dispositivo.
Um hash pode ser revertido para recuperar o texto original?
Não. Um hash é uma impressão digital de comprimento fixo, não uma cópia cifrada, e o original não pode ser recuperado a partir dele. Os sites que anunciam «desencriptação de MD5» limitam-se a procurar o seu hash numa tabela de entradas comuns já calculadas, o que só funciona com texto curto ou previsível.
Por que MD5 e SHA-1 têm aqui um aviso?
Porque em ambos as colisões são praticáveis: podem construir-se duas entradas diferentes que compartilham um digest. Isso torna-os inadequados para provar que um arquivo não foi adulterado de propósito, embora continuem úteis para pegar corrupção acidental.
Que algoritmo devo usar?
O SHA-256 é a escolha padrão sensata e é o que a maioria dos projetos publica hoje. O SHA-512 não é significativamente mais seguro para este fim, mas é mais rápido em hardware de 64 bits. Use MD5 ou SHA-1 apenas quando algo que não controla já os exigir.
Posso usar isto para uma senha?
Pode, mas não deve armazenar o resultado. Armazenar senhas exige uma função lenta e com salt como Argon2id, scrypt ou bcrypt — hashes rápidos como estes são precisamente o que torna fáceis de quebrar os bancos de dados de senhas roubados.
Por que os hashes mudam quando acrescento um espaço ou uma quebra de linha?
Porque os espaços fazem parte da entrada. Uma quebra de linha no fim é a razão mais comum para um hash não corresponder ao esperado — texto copiado de um terminal ou de um editor traz muitas vezes uma que não se vê.
Lida corretamente com hebraico, árabe e emojis?
Sim. O texto é codificado em bytes UTF-8 antes de ser processado, que é o padrão usado por todas as outras ferramentas, portanto processar «שלום» ou um emoji aqui dá o mesmo digest que md5sum ou sha256sum num arquivo UTF-8 com esses mesmos caracteres.
Por que processa texto mas não arquivos?
A Web Crypto não tem uma API de digest em fluxo, por isso um arquivo teria de ser lido inteiro para a memória antes de poder ser processado, e o MD5 escrito à mão seria visivelmente lento com um arquivo grande. Processar texto cobre o caso comum com honestidade, em vez de oferecer um processamento de arquivos que bloqueia a página.

Ferramentas relacionadas