Gerador de Hash MD5, SHA-1 e SHA-256

MD5, SHA-1, SHA-256, SHA-512 e CRC32 do mesmo texto ou arquivo, de uma vez, mais a conferência do arquivo baixado contra o hash publicado. Nada sai do seu computador.

Sai tudo de uma vez, do mesmo texto: MD5, SHA-1, SHA-256, SHA-512 e CRC32. A conta acontece dentro do seu navegador, então o texto não é enviado nem guardado em lugar nenhum.

Conferir um arquivo que você baixou

É para isso que hash serve todo dia. Quem publica um programa, um instalador ou um backup costuma publicar o hash do arquivo ao lado do link. Se o hash que sai aqui for igual ao que está lá, o arquivo chegou inteiro e é o mesmo. Se for diferente, alguma coisa aconteceu no caminho.

O arquivo é lido pelo seu próprio navegador: ele não é enviado para a gente nem para ninguém. Serve para arquivo grande também, de instalador a backup do sistema.

A prova de que o MD5 quebrou

Todo texto sobre hash repete que o MD5 não serve mais para segurança, e quase nunca mostra o porquê. Aqui embaixo estão dois blocos de 128 bytes que são diferentes, em 6 posições, e mesmo assim têm o mesmo MD5. Eles saíram do trabalho de Xiaoyun Wang e Hongbo Yu, apresentado em 2004, que foi o começo do fim do MD5. Clica no botão e confere você mesmo, com a mesma conta que a ferramenta lá em cima usa.

O mesmo par de blocos aparece em qualquer implementação correta de MD5. Se você tiver Linux ou Mac por perto, dá para repetir a conta no terminal e conferir que o resultado é esse mesmo.

O que é um hash

Hash é a impressão digital de um conteúdo. Você joga qualquer coisa dentro (uma palavra, um contrato, um vídeo de 4 GB) e sai sempre a mesma sequência de letras e números, do mesmo tamanho, toda vez. Mudou um pontinho no conteúdo, sai outra sequência completamente diferente.

Duas propriedades fazem isso valer alguma coisa. A primeira: o mesmo conteúdo sempre gera o mesmo hash, em qualquer computador do mundo, hoje e daqui a dez anos. A segunda: pelo hash não dá para voltar ao conteúdo, porque a conta é de mão única.

Junte as duas e você tem um jeito barato de responder a uma pergunta que aparece o tempo todo: esses dois arquivos são o mesmo arquivo? Em vez de comparar byte por byte, compara duas linhas de 64 caracteres.

Para que isso serve fora do mundo da programação

Conferir um arquivo que você baixou. É o uso mais direto. Quem publica um instalador, um programa da Receita ou um driver costuma publicar o hash do arquivo ao lado do link. Você baixa, calcula o hash aqui e compara. Se bate, o arquivo chegou inteiro e é o mesmo que foi publicado. Se não bate, o download veio corrompido ou o arquivo não é o que deveria ser.

Saber se dois arquivos são iguais. Aconteceu com todo mundo: duas pastas de backup, duas versões da planilha, dois PDFs com nomes parecidos. O hash resolve em dez segundos, sem abrir nenhum dos dois.

Provar que um arquivo não mudou. Se você guarda o hash de um documento hoje, daqui a um ano dá para provar que o arquivo é aquele mesmo, sem depender da data do sistema, que qualquer um altera.

Integrar com sistema de terceiro. Gateway de pagamento, API de nota, ERP: muita integração pede uma assinatura que é o hash de um texto montado com seus dados mais uma chave. É a parte que mais dá dor de cabeça, e quase sempre pelo motivo que está mais abaixo nesta página.

Hash não é criptografia, e não tem volta

Essa confusão custa caro, então vale ser direto: criptografia tem volta, hash não tem. Texto criptografado existe para ser decifrado depois por quem tem a chave. Hash não guarda o conteúdo em lugar nenhum: ele é um resumo que joga informação fora no caminho.

Dá para ver isso no tamanho. O MD5 de uma letra tem 32 caracteres. O MD5 de um filme de 2 GB também tem 32 caracteres. Se fosse possível voltar, os 2 GB estariam guardados ali dentro, e não estão.

E aqueles sites que prometem “descriptografar MD5”? Eles não descriptografam nada. Eles guardaram bilhões de textos comuns com o hash de cada um e fazem uma consulta. Se o seu MD5 for de 123456 ou do nome do seu cachorro, o resultado aparece na hora. Se for de um texto que ninguém nunca escreveu, não aparece nunca.

Qual algoritmo escolher

MD5 devolve 32 caracteres. Nasceu em 1991 e ainda é o mais pedido, por força do hábito. Serve para conferir se um arquivo chegou inteiro, porque nesse caso o inimigo é a conexão cair no meio do download. Não serve para nada que envolva alguém querendo te enganar.

SHA-1 devolve 40 caracteres. Está na mesma situação do MD5, só que quebrou mais tarde. Ainda aparece em sistema antigo e em assinatura de arquivo, mas ninguém deveria escolher ele para coisa nova.

SHA-256 devolve 64 caracteres, e é a escolha padrão de hoje. Quando não houver motivo forte para outro, é esse. É ele que aparece na maior parte dos sites que publicam o hash dos arquivos, e é ele que roda por dentro do Bitcoin e de boa parte da internet.

SHA-512 devolve 128 caracteres. Mesma família do SHA-256, com mais folga. Aparece em servidor e em senha de sistema operacional.

CRC32 devolve só 8 caracteres, e não é da mesma turma dos outros. Ele foi feito para detectar erro de transmissão, não para resistir a ninguém. É o que o arquivo ZIP usa por dentro e o que a rede usa em cada pacote. Serve para responder “chegou inteiro?” e não serve para responder “é o mesmo arquivo?”.

Por que o MD5 saiu de cena

O problema tem nome: colisão. É quando dois conteúdos diferentes dão o mesmo hash. Em teoria, colisão sempre existe, porque o hash tem tamanho fixo e o mundo tem conteúdo infinito. Na prática, o que importa é se alguém consegue fabricar uma de propósito.

Com o MD5, consegue. Xiaoyun Wang e Hongbo Yu mostraram isso em 2004, e o par de blocos que elas encontraram está lá em cima nesta página para você calcular com as próprias mãos: dois blocos de 128 bytes, diferentes em 6 posições, com o mesmo MD5. O que na época levou horas de computador grande, hoje um notebook comum faz em segundos.

Isso já saiu do papel. Em 2012, o programa espião Flame usou uma colisão de MD5 para forjar um certificado que parecia assinado pela Microsoft, e com isso se instalava passando por atualização legítima do Windows.

Com o SHA-1 a mesma coisa aconteceu em 2017, no trabalho que o Google e o instituto holandês CWI batizaram de SHAttered: dois arquivos PDF com conteúdo visível diferente e o mesmo SHA-1.

A moral prática é curta. Se o que você quer é saber se o download corrompeu, MD5 resolve. Se existe alguém que ganharia alguma coisa te enganando, use SHA-256.

Senha nunca deve ser guardada em MD5

Se você tem um sistema feito sob medida, vale essa pergunta para quem cuida dele: como as senhas dos usuários estão guardadas? Se a resposta for MD5 ou SHA-1, tem problema, e não é pela colisão.

É pela velocidade. Esses algoritmos foram feitos para serem rápidos, e uma placa de vídeo comum testa bilhões de tentativas por segundo em cima deles. Uma lista de senhas em MD5 que vaze hoje está aberta amanhã, e a maioria delas nem precisa de esforço: as mais usadas já estão em tabela pronta.

O certo para senha é um algoritmo feito de propósito para ser lento e com um tempero aleatório por usuário: bcrypt, scrypt ou argon2. Aí a mesma senha de duas pessoas fica com resultados diferentes guardados, e cada tentativa custa caro para quem está atacando. Já que você está aqui, o gerador de senha faz a outra metade do trabalho.

Por que o hash “não bate” entre dois sistemas

Essa é a causa de quase todo suporte perdido em integração, e ela tem duas explicações possíveis.

A primeira é o acento. O hash é dos bytes, não das letras. A palavra ação escrita em UTF-8 vira uma sequência de bytes, e escrita em Latin-1 vira outra. São a mesma palavra na tela e conteúdos diferentes para o algoritmo, então o hash sai diferente. A ferramenta aqui de cima mostra os dois resultados lado a lado quando o seu texto tem acento, justamente para essa hora. Se quiser ver os bytes por baixo, o tradutor de binário abre a palavra byte a byte, e o conversor de Base64 passa pelo mesmo caminho.

A segunda é o que sobra na ponta. Um espaço no fim, um Enter invisível que o editor colocou, uma quebra de linha do Windows que tem dois bytes onde a do Linux tem um. Tudo isso é conteúdo e tudo isso muda o hash inteiro.

Como conferir um arquivo baixado, na prática

O passo a passo é o mesmo sempre. Baixe o arquivo. Ache o hash publicado pelo site oficial, que costuma estar na própria página de download, com o nome de checksum, SHA-256 ou soma de verificação. Escolha o arquivo no segundo bloco desta página, cole o hash publicado no campo de baixo e clique. A resposta é sim ou não.

Duas ressalvas que fazem diferença. O hash tem que vir da fonte oficial, e de preferência de um endereço diferente do arquivo: se as duas coisas estiverem no mesmo lugar invadido, quem trocou o arquivo trocou o hash junto e a conferência não prova nada. E se o hash não bater, não abra o arquivo por curiosidade. Baixe de novo, e se continuar diferente, apague.

Fora do navegador dá para fazer o mesmo. No Windows, certutil -hashfile arquivo SHA256 no Prompt de Comando. No Mac e no Linux, shasum -a 256 arquivo no terminal. O resultado é idêntico ao daqui, porque a conta é a mesma em qualquer lugar.

Perguntas rápidas

O que é o hash MD5 de um texto?

É uma sequência de 32 caracteres, entre letras de a a f e números, calculada a partir do conteúdo do texto. O mesmo texto sempre devolve o mesmo MD5, em qualquer computador, e qualquer alteração no texto muda o resultado inteiro. Ele funciona como uma impressão digital do conteúdo.

Dá para descriptografar um MD5 e descobrir o texto original?

Não. Hash é uma conta de mão única: ele resume o conteúdo e joga informação fora no caminho, então não existe volta. Os sites que prometem quebrar MD5 apenas consultam listas gigantes de textos comuns com o hash de cada um já calculado. Se o hash for de uma senha óbvia, aparece; se for de um texto que ninguém nunca escreveu, não aparece.

O MD5 ainda pode ser usado?

Para conferir se um arquivo baixado chegou inteiro, sim, porque ali o problema é a conexão falhar e não alguém agindo de má-fé. Para qualquer coisa que envolva segurança, não: desde 2004 se sabe fabricar dois conteúdos diferentes com o mesmo MD5, e em 2012 isso foi usado de verdade pelo programa espião Flame para forjar um certificado da Microsoft. Nesses casos, use SHA-256.

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

O tamanho do resultado e a resistência. MD5 devolve 32 caracteres, SHA-1 devolve 40 e SHA-256 devolve 64. MD5 e SHA-1 já foram quebrados na prática, em 2004 e em 2017. O SHA-256 continua de pé e é a escolha padrão hoje quando não existe motivo forte para outro.

Meu arquivo é enviado para o site quando eu calculo o hash?

Não. Tanto o texto quanto o arquivo são lidos e calculados dentro do seu próprio navegador. Nada é enviado para a gente nem para ninguém, e nada fica guardado. Você pode até desligar a internet depois que a página abrir e a ferramenta continua funcionando.

Por que o mesmo texto deu hash diferente em dois sistemas?

Quase sempre é acento ou sobra na ponta. O hash é calculado sobre os bytes, e a palavra ação em UTF-8 tem bytes diferentes da mesma palavra em Latin-1. Um espaço a mais no fim, ou um Enter invisível, também muda o resultado inteiro. A ferramenta aqui mostra o hash nas duas codificações quando o seu texto tem acento.

🧮 Veja também

Ver todas as ferramentas →

📖 Do blog do Kit de Negócios

Ver todos os posts →

🚀 Para o seu negócio crescer

Links de afiliado: se você comprar por eles, o Kit de Negócios recebe uma comissão pequena, sem custo nenhum para você. É o que paga o site. 💙