O que é um hash MD5
O MD5 é uma função de hash. Ela recebe qualquer entrada, de uma única letra a um arquivo grande, e produz uma impressão digital de tamanho fixo, com 128 bits, normalmente escrita como 32 caracteres hexadecimais. A mesma entrada sempre dá o mesmo hash. Uma mudança mínima, até de um caractere, dá um hash completamente diferente.
Ron Rivest publicou o MD5 em 1992. Ele ainda é comum em checksums de páginas de download, para encontrar arquivos duplicados, como chave de cache e para detectar mudanças rapidamente. Ele não é mais considerado seguro, como esta página explica mais abaixo.
Como usar o gerador de MD5
Calcular o hash de um texto. Em Calcular hash de, deixe Texto selecionado e digite ou cole na caixa. Os hashes são atualizados enquanto você digita. O texto é processado em UTF-8, exatamente como foi digitado, incluindo espaços e quebras de linha.
Calcular o hash de um arquivo. Clique em Arquivo e escolha um arquivo de até 500 MB. O arquivo é lido no seu aparelho. O nome do arquivo e o tamanho em bytes aparecem quando os hashes ficam prontos.
Leia os resultados. O painel Hashes mostra quatro resultados:
- MD5, em destaque, com 32 caracteres hex
- SHA-1, com 40 caracteres
- SHA-256, com 64 caracteres
- SHA-512, com 128 caracteres
Cada um tem seu próprio botão Copiar. Clique em Maiúsculas se precisar das letras maiúsculas.
Comparar com um hash conhecido. Cole neste campo um checksum de uma página de download. A ferramenta compara com os quatro resultados e diz qual deles bate. Se nenhum bater, ela usa o tamanho do seu hash para dizer com qual algoritmo ele parece.
Como o MD5 funciona
O MD5 completa a entrada até um múltiplo de 512 bits e a processa em blocos. Cada bloco passa por 64 rodadas de mistura de bits que combinam somas, rotações e operações lógicas. O estado final, formado por quatro palavras de 32 bits, é o hash. Como há muita mistura, o resultado parece aleatório e muda por completo quando qualquer bit da entrada muda. Isso se chama efeito avalanche.
Exemplos
| Entrada | MD5 |
|---|---|
| (vazio) | d41d8cd98f00b204e9800998ecf8427e |
abc |
900150983cd24fb0d6963f7d28e17f72 |
hello |
5d41402abc4b2a76b9719d911017c592 |
Hello |
8b1a9953c4611296a827abf8c47804d7 |
Hello, World! |
65a8e27d8879283831b664bd8b7f0ad4 |
The quick brown fox jumps over the lazy dog |
9e107d9d372bb6826bd81d3542a419d6 |
The quick brown fox jumps over the lazy dog. |
e4d909c290d0fb1ca068ffaddf22cbd0 |
acao |
70cc5d876fc7748c80b780a582c26527 |
ação |
ce762a2c8073e0b6ad5d9bc99283af67 |
As duas linhas da raposa diferem por um único ponto final, e mesmo assim os hashes não têm nada em comum. O mesmo acontece com “acao” e “ação”: os acentos mudam os bytes e, portanto, o hash inteiro. Se outro sistema guardou “ação” em Latin-1 (ISO-8859-1) em vez de UTF-8, o MD5 dele vai ser ae4a7803202641a834921dad2d15bb2c, e não o desta página.
A mesma entrada, abc, com os outros algoritmos:
| Algoritmo | Hash de abc |
|---|---|
| SHA-1 | a9993e364706816aba3e25717850c26c9cd0d89d |
| SHA-256 | ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad |
Segurança: para que o MD5 serve e para que não serve
Serve: conferir se um arquivo chegou sem corrupção, encontrar arquivos duplicados, montar chaves de cache e IDs sem função de segurança.
Não serve: senhas, assinaturas digitais, certificados ou provar que um arquivo não foi alterado por alguém tentando enganar você. Ataques práticos de colisão contra o MD5 são públicos desde 2004. Atacantes conseguem montar dois arquivos diferentes com o mesmo MD5.
Senhas precisam de um hash lento. Até o SHA-256 é rápido demais para senhas. Use bcrypt, scrypt ou Argon2, que foram feitos para desacelerar as tentativas. Um hash MD5 simples de senha, como 5f4dcc3b5aa765d61d8327deb882cf99 (a palavra “password”), é reconhecido na hora por qualquer site de consulta.
Outras formas de calcular um hash MD5
Linux. md5sum file.zip mostra o hash e o nome do arquivo. echo -n hello | md5sum calcula o hash de um texto. Sem o -n, a quebra de linha também entra no cálculo.
macOS. md5 file.zip, ou md5 -s hello para texto.
Windows. certutil -hashfile file.zip MD5 no Prompt de Comando, ou Get-FileHash file.zip -Algorithm MD5 no PowerShell.
Python. hashlib.md5(b'hello').hexdigest() devolve 5d41402abc4b2a76b9719d911017c592. Para textos com acento, codifique antes: hashlib.md5('ação'.encode('utf-8')).hexdigest().
Node.js. require('crypto').createHash('md5').update('hello').digest('hex') dá o mesmo valor.
Ferramentas relacionadas
Precisa de uma senha, e não de um hash? Use o gerador de senhas fortes. Para IDs únicos, o gerador de UUID é mais adequado do que calcular o hash de dados aleatórios. Para codificar dados binários como texto, veja a ferramenta de Base64: decodificar e codificar.