Gerador de Hash MD5
Criptografia MD5 online, suporta saída de 16 bits e 32 bits, conversão de maiúsculas/minúsculas
Configurações de formato
O que é criptografia MD5?
MD5 (Algoritmo de Resumo de Mensagem 5) é uma função hash criptográfica amplamente utilizada, projetada pelo criptógrafo americano Ronald Rivest em 1991. O MD5 pode mapear dados de qualquer comprimento para um valor hash fixo de 128 bits (16 bytes), tipicamente representado por 32 dígitos hexadecimais. O MD5 foi amplamente utilizado para verificação de integridade de dados, armazenamento de senhas e assinaturas digitais. No entanto, em 2004, a criptógrafa chinesa Wang Xiaoyun e sua equipe descobriram vulnerabilidades de colisão no MD5, permitindo que atacantes construíssem dois dados diferentes com o mesmo valor MD5. Portanto, o MD5 não é mais adequado para cenários sensíveis à segurança. Os formatos de saída MD5 vêm em dois tipos: o padrão de 32 bits (valor hash completo) e o truncado de 16 bits (pegando os 16 caracteres do meio do valor de 32 bits). Esta ferramenta suporta ambos os formatos de saída com opções de exibição em maiúsculas ou minúsculas.
Como Usar
Como usar
- Insira o texto a ser criptografado no campo de entrada
- Selecione o formato de saída: 32 bits em maiúsculas, 32 bits em minúsculas, 16 bits em maiúsculas ou 16 bits em minúsculas
- O valor MD5 será calculado e exibido automaticamente
- Clique no botão 'Copiar' para copiar o resultado
Descrição do Formato de Saída
- Use a saída de 32 caracteres quando precisar do resumo MD5 completo para checksums, chaves de cache ou campos de API legados.
- Use a saída de 16 caracteres somente quando um sistema legado exigir explicitamente os 16 caracteres centrais do resumo completo.
Descrição de Maiúsculas/Minúsculas
- Os valores MD5 em maiúsculas e minúsculas contêm os mesmos bytes hexadecimais; a diferença está apenas no formato de exibição.
- Ao comparar valores MD5, use exatamente o padrão de maiúsculas/minúsculas exigido pelo sistema de destino para evitar incompatibilidades falsas.
Casos de uso
Princípio técnico
MD5 (Message-Digest Algorithm 5) foi projetado por Ronald Rivest no MIT em 1991 e publicado como RFC 1321, substituindo o MD4 comprometido. Foi o hash de trabalho das décadas de 1990 e 2000: verificação de integridade de arquivos, armazenamento de senhas (de forma inadequada, sem salt), assinaturas digitais, impressão digital de malware e o resumo padrão em ferramentas tão diversas quanto `md5sum`, o `MD5()` do MySQL, o armazenamento de objetos antigo do Git e `openssl dgst -md5`. A saída é de 128 bits (16 bytes), quase sempre exibida como 32 caracteres hexadecimais minúsculos. O design segue Merkle-Damgård: preenche a mensagem até um múltiplo de 512 bits, anexa um comprimento de 64 bits em little-endian e então itera uma função de compressão sobre cada bloco de 512 bits. O estado de 128 bits é exposto nos quatro registradores de 32 bits A, B, C, D, inicializados com constantes fixas (0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 — escolhidos como valores 'nothing-up-my-sleeve': são as raízes quadradas de 2, 3, 5, 10 em little-endian). Cada bloco de 512 bits é dividido em dezesseis palavras de 32 bits M[0..15] e processado por 4 rodadas de 16 etapas (64 etapas no total). As funções de rodada são F = (X AND Y) OR (NOT X AND Z), G = (X AND Z) OR (Y AND NOT Z), H = X XOR Y XOR Z, I = Y XOR (X OR NOT Z); cada etapa combina uma função de rodada, uma palavra de mensagem, uma constante de rodada T[i] = floor(2^32 · |sin(i+1)|) e uma rotação à esquerda por uma quantidade específica da etapa, e então adiciona o resultado de volta ao estado. O design das 4 rodadas: rodada 1 é rápida e não linear, rodada 2 é paralelizável, rodada 3 mistura de forma mais agressiva, rodada 4 finaliza com forte difusão. O estado final é o MD5 de toda a mensagem; é isso que torna o MD5 uma função unidirecional no sentido pré-quântico. A quebra: a resistência a colisões está comprometida, e isso é tudo que importa para uso criptográfico. Wang et al. publicaram um ataque de colisão completo em 2004 (os ataques CFRG reduziram a busca por colisão a poucas horas em um PC). Em 2008, pesquisadores usaram colisões MD5 para forjar um certificado CA válido (o ataque de 'colisão de prefixo escolhido' de Stevens et al.), e em 2012 o malware Flame abusou de uma colisão MD5 ainda não divulgada para forjar um certificado de assinatura de código da Microsoft. O artigo de 2004 reduziu o espaço de busca de colisão de 2^64 para aproximadamente 2^24, então qualquer atacante com poucas horas de computação pode produzir duas mensagens com o mesmo MD5. Após o Flame, a Microsoft proibiu explicitamente o MD5 no Authenticode; navegadores revogaram certificados TLS assinados com MD5 entre 2014 e 2017; e o IETF há muito depreciou o MD5 em TLS, SSH e IPsec. Números de desempenho de um laptop x86-64 moderno: MD5 faz hash a 400-700 MB/s por core (limitado por largura de banda de memória em entradas grandes), SHA-256 a 200-300 MB/s, SHA-512 mais rápido em CPUs de 64 bits devido a operações com palavras de 64 bits. Para hash de senhas, o MD5 é inadequado independentemente da taxa de transferência — bcrypt/scrypt/Argon2id são intencionalmente ajustáveis para derrotar aceleração por GPU. Em uma única RTX 4090, o Hashcat faz benchmark do MD5 a aproximadamente 60 GH/s (gigahashes por segundo) — 7-8x mais rápido que SHA-256 na mesma GPU. Essa diferença é a razão pela qual o MD5 é perigoso: a GPU pode processar tabelas pré-computadas em horas, não anos. O `crypto.subtle.digest('MD5', bytes)` do Web Crypto roda em velocidade próxima ao disco no Chrome, Edge e Firefox 102+; navegadores mais antigos recorrem a uma implementação em JS puro (SparkMD5 ou a própria página) a 50-150 MB/s. Vetores de teste do RFC 1321: string vazia tem hash d41d8cd98f00b204e9800998ecf8427e, 'a' tem 0cc175b9c0f1b6a831c399e269772661, 'abc' tem 900150983cd24fb0d6963f7d28e17f72. Se sua saída não corresponder a esses valores, o bug é quase sempre um problema de codificação (passar uma string JS para uma implementação JS de MD5 em vez de bytes UTF-8) e não o algoritmo em si.
- A construção Merkle-Damgård torna o MD5 vulnerável a extensão de comprimento: dado H(secret || msg), um atacante pode calcular H(secret || msg || padding || extra) sem conhecer o secret. É por isso que MD5(secret || message) não é um MAC seguro — use HMAC-MD5 (RFC 2104) ou HMAC-SHA256, que usam uma estrutura diferente (hash aninhado de duas chaves) resistente a este ataque.
- Vetores de teste (RFC 1321): a string vazia tem hash d41d8cd98f00b204e9800998ecf8427e, 'a' tem 0cc175b9c0f1b6a831c399e269772661, 'abc' tem 900150983cd24fb0d6963f7d28e17f72. Se sua implementação não produzir esses valores, o bug é quase sempre um problema de codificação (passar uma string JavaScript para uma implementação JS de MD5 em vez de bytes UTF-8 via TextEncoder), e não o algoritmo em si.
- Taxa de hash: um único core de uma CPU x86-64 moderna faz aproximadamente 400-700 MB/s de MD5, dominado por largura de banda de memória em entradas grandes. SHA-256 é cerca de 30% mais lento a 200-300 MB/s, e SHA-512 é mais rápido em CPUs de 64 bits porque opera com palavras de 64 bits. Para hash de senhas especificamente, a escolha correta é bcrypt (fator de custo 12) / scrypt / Argon2id, que são intencionalmente lentos e ajustáveis para derrotar aceleração por GPU.
- As '4 funções de rodada' F, G, H, I foram deliberadamente nomeadas para formar uma frase ('FiGiHI' / 'figi hi'), uma assinatura de Rivest. Cada uma usa apenas operações bit a bit e estruturas de mistura diferentes para que o algoritmo não colapse em um sistema linear ou afim sob criptoanálise. O conceito de S-box do DES / AES não existe no MD5; a segurança vem da expansão de palavras de mensagem e das constantes de rotação, não de tabelas de substituição.
- Benchmark do Hashcat em uma única RTX 4090: aproximadamente 60 GH/s para MD5 (contra hash puro) e 30 GH/s para MD5 com salt. SHA-256 na mesma GPU é 8 GH/s. A diferença de 7-8x é a razão pela qual atacantes adoram o MD5: a GPU pode processar tabelas pré-computadas em horas, não anos. Use SHA-256, bcrypt ou Argon2id para qualquer coisa que precise resistir a ataques offline.
- O 'MD5 duplo' (MD5(MD5(x))) é encontrado às vezes em código antigo de PHP e MySQL, frequentemente com um salt. Não ajuda contra ataques de colisão (uma colisão de MD5 é uma colisão de MD5(MD5()) com trabalho O(1) extra) e apenas desacelera levemente a busca de preimagem (fator de 2). Hash de senhas moderno (Argon2id do RFC 9106, scrypt do RFC 7914, bcrypt com custo ≥ 12) é a única resposta correta para armazenamento de senhas; se você encontrar MD5 em uma coluna de senhas moderna, é um bug.
- Migrando do MD5: se você mantém um sistema que atualmente usa MD5, a migração correta é escrita dupla (calcular MD5 e SHA-256 na leitura, preferir SHA-256 em novos caminhos de código) durante um período de depreciação e então remover o MD5 quando nada depender dele. Para protocolos legados que exigem MD5 (NTLM, desafio-resposta RADIUS, alguns modos Kerberos), o MD5 não vai desaparecer em breve — a Microsoft corrigiu o NTLM para usar AES em 2010, mas a versão antiga ainda está ativada por padrão por compatibilidade, e você deve desabilitar o NTLMv1 completamente se tiver sistemas Windows legados.
- A implementação da página: quando o Web Crypto está disponível (Chrome, Edge, Firefox 102+), `crypto.subtle.digest('MD5', utf8Bytes)` é usado, roda em código nativo em velocidade próxima ao disco. Quando não está disponível, uma implementação em JS puro (SparkMD5 0.7 ou a própria página) é usada, rodando a 50-150 MB/s. Ambas produzem saída idêntica, então os vetores de teste passam em ambos os backends. A etapa de codificação é `new TextEncoder().encode(str)`, que sempre fornece bytes UTF-8; não passe uma string JavaScript diretamente para uma implementação de MD5 apenas em JS ou você obterá um hash incorreto em qualquer entrada não ASCII.
Exemplos
String vazia e texto curto
String vazia -> d41d8cd98f00b204e9800998ecf8427e
hello -> 5d41402abc4b2a76b9719d911017c592
RFC: a RFC 1321 seção A.1 define esses vetores de testeSensibilidade a maiúsculas e minúsculas
hello world -> 5eb63bbbe01eeed093cb22bb8f5acdc3
Hello -> 8b1a9953c4611296a827abf8c47804d7
HELLO -> eb61eead90e3b899c6bcbe27ac581660
Observação: alterar um único caractere muda completamente o hash (efeito avalanche)Números e pontuação
123456 -> e10adc3949ba59abbe56e057f20f883e
Hello, World! -> 65a8e27d8879283831b664bd8b7f0ad4
file.txt -> 3d8e577bddb17db339eae0b3d9bcf180
Observação: qualquer alteração em pontuação ou espaços produz um digest completamente diferentePor que MD5 não é recomendado para segurança
Ataque de colisão: em 2004, pesquisadores encontraram formas de criar duas
mensagens diferentes com o mesmo hash MD5. Isso quebra assinaturas digitais
e validação de certificados.
Para segurança, use SHA-256 ou SHA-3:
MD5: 128 bits, resistência a colisão quebrada (ataque viável)
SHA-256: 256 bits, sem colisões práticas encontradas
SHA-512: 512 bits, margem ainda mais forte
NIST: o NIST descontinuou o MD5 para uso criptográfico desde 2005
Uso: MD5 ainda é seguro para verificações de integridade de arquivo, deduplicação e chaves de cachePerguntas frequentes
O que é MD5?
MD5 (Message Digest 5, RFC 1321) é uma função de hash de 128 bits publicada por Ron Rivest em 1991. Sempre retorna 32 caracteres hexadecimais, independentemente do tamanho da entrada, e a saída muda completamente se mesmo um bit da entrada mudar. É rápido — centenas de MB/s em uma CPU moderna.
O MD5 é seguro?
Não para fins de segurança. Ataques de colisão contra MD5 são práticos desde 2004, e colisões com prefixo escolhido desde 2007. Não use MD5 para assinaturas digitais, hashes de certificados, armazenamento de senhas ou qualquer detecção de adulteração em que um atacante possa escolher qualquer uma das entradas.
Para que ainda posso usar MD5?
Detectar corrupção acidental: checksums de download, deduplicação simples de arquivos confiáveis e impressões digitais rápidas no estilo ETag. Muitos fornecedores continuam a publicar MD5 por compatibilidade retroativa, frequentemente junto com SHA-256.
O cálculo é feito localmente?
Sim. O MD5 do texto colado é calculado no seu navegador. Nada é enviado ou registrado. Você pode confirmar verificando a aba Network enquanto faz o hash.
Por que a mesma string produz um MD5 diferente em outros lugares?
Quase sempre devido a uma diferença de caractere oculto: um BOM UTF-8, uma quebra de linha no final, CRLF em vez de LF, ou uma ferramenta codificando como UTF-8 enquanto outra codifica como UTF-16. O algoritmo MD5 em si é totalmente determinístico em todas as implementações.
MD5 em maiúsculas e minúsculas é o mesmo?
Sim. Os 128 bits de saída são idênticos; o tipo de letra é apenas convenção de exibição. Verificadores devem comparar sem diferenciar maiúsculas e minúsculas.
Qual a diferença entre MD5 e MD5(salt + senha)?
MD5 puro de uma senha é trivialmente quebrável com tabelas rainbow. Adicionar um salt bloqueia tabelas pré-computadas, mas o MD5 ainda é rápido demais para hash de senhas. Use bcrypt/scrypt/Argon2 para senhas; MD5 (com ou sem salt) é a ferramenta errada para esse trabalho.