Pular para o conteúdo principal

Gerar hash

O Gerador de hash calcula MD5, SHA-1, SHA-256, SHA-384, SHA-512, CRC32 e HMAC no seu navegador. Cada resultado traz o status de segurança do algoritmo, porque o fato mais importante sobre MD5 e SHA-1 é que ambos estão quebrados — e uma ferramenta que os oferece sem dizer isso é parte do problema.

Só local
Saída
Entrada
0 B1 linhaLin. 1, Col. 1
Resumos
AlgoritmoStatusResumoCopiar
MD5128inseguro…
SHA-1160inseguro…
SHA-256256atual…
SHA-384384atual…
SHA-512512atual…
CRC3232soma de verificação…
Nenhum deles serve para armazenar senhas. SHA-256 é rápido e permite bilhões de tentativas. Use bcrypt, scrypt ou Argon2.

Como funciona o Gerar hash?

Um hash mapeia qualquer entrada para um valor de tamanho fixo, de modo que achar duas entradas com a mesma saída deveria ser inviável. O “deveria” carrega muito peso nessa frase, e saber quais algoritmos ainda cumprem essa promessa é a informação mais útil que esta página pode lhe dar.

MD5 e SHA-1 estão quebrados, e isso não é teoria

Colisões de MD5 podem ser produzidas em um laptop em segundos, e já foram usadas na prática: o malware Flame falsificou um certificado de assinatura de código da Microsoft com uma colisão de MD5 em 2012. O SHA-1 caiu em 2017, quando Google e CWI produziram dois PDFs com o mesmo digest, e o custo só diminuiu desde então. Nenhum dos dois é aceitável para uma assinatura, para integridade contra um adversário ou para deduplicar entrada que você não controla. Ambos funcionam bem como checksums sem função de segurança, e ambos ainda estão em todo lugar — é por isso que estão aqui.

Um hash não é um hash de senha

O SHA-256 é projetado para ser rápido — bilhões de operações por segundo em uma GPU — e rapidez é precisamente o que está errado para uma senha, em que a defesa é ser lento o bastante para que adivinhar custe mais do que a senha vale. Guardar o SHA-256 de uma senha, com sal ou sem, significa que um atacante com o banco de dados testa a lista inteira de senhas comuns em minutos. As ferramentas certas são bcrypt, scrypt e Argon2, todas com um fator de custo deliberado. Nada nesta página é hash de senha.

HMAC não é “fazer o hash da chave e da mensagem”

A construção óbvia, H(key || message), está quebrada em qualquer hash Merkle–Damgård — o que inclui MD5, SHA-1 e SHA-256. Um atacante que conhece o digest e o tamanho da chave pode anexar dados e calcular um digest válido para a mensagem estendida sem nunca ver a chave. Esse é o ataque de extensão de comprimento, e é por isso que o HMAC existe como primitiva separada, com seus hashes interno e externo aninhados. SHA-384 e SHA-512/256 são imunes por construção, por serem truncados.

A codificação da entrada muda o hash

O hash é definido sobre bytes, não caracteres, então o digest de café depende de o caractere acentuado ser os dois bytes UTF-8 C3 A9 ou o único byte Latin-1 E9. Esta página usa UTF-8 do começo ao fim, que é o que todo sistema atual entende. Uma assinatura que verifica localmente e falha em produção é, muitas vezes, exatamente isso.

CRC32 não é um hash em absoluto

É um checksum de detecção de erros projetado para falhas de transmissão, e é trivial construir uma colisão de propósito. Com apenas 32 bits, ele também colide por acidente depois de cerca de 65,000 entradas, pelo limite do aniversário. Certo para detectar um download corrompido; errado para qualquer outra coisa.

Entrada

abc

Digests

MD5     900150983cd24fb0d6963f7d28e17f72   broken
SHA-1   a9993e364706816aba3e25717850c26c9cd0d89d  broken
SHA-256 ba7816bf8f01cfea414140de5dae2223b0…      current

Quais opções e casos-limite o Gerar hash suporta?

Referência técnica e opções
ParâmetroTipoPadrãoComportamento e casos-limite
MD5128-bitquebradoColisões são práticas em um laptop e já foram usadas em ataques reais. Bom como um checksum não relacionado à segurança; nunca para assinaturas, integridade contra um adversário ou deduplicação de entrada não confiável.
SHA-1160-bitquebradoO SHAttered produziu uma colisão real em 2017 e o custo caiu desde então. Navegadores e autoridades certificadoras abandonaram o SHA-1. O Git ainda o usa para nomes de objetos, o que é uma decisão de compatibilidade, não de segurança.
SHA-256256-bitatualO padrão atual para integridade e assinaturas. Nenhum ataque prático. Rápido por design, o que o torna a escolha errada para hash de senha.
SHA-384384-bitatualSHA-512 truncado, o que o torna imune ao ataque de extensão de comprimento que afeta o SHA-256. Escolhido onde essa propriedade importa.
SHA-512512-bitatualMais rápido que o SHA-256 em hardware de 64 bits, apesar da saída maior. Vale a pena preferir onde o comprimento extra não é um custo.
CRC3232-bitchecksumUm checksum de detecção de erros, não um hash. Trivial de forger intencionalmente e colide por acidente após cerca de 65.000 entradas. Correto para capturar uma transferência corrompida e errado para tudo o mais.
HMACcom chaveapenas família SHAUma construção com chave que resiste à extensão de comprimento, ao contrário de fazer o hash de uma chave e uma mensagem juntos. Oferecido para os algoritmos SHA; MD5 e CRC32 são excluídos porque HMAC sobre um hash quebrado é um MAC quebrado.
Codificação de entradaUTF-8sempreO hashing é definido sobre bytes. Um resumo do mesmo texto difere entre UTF-8 e Latin-1, o que é uma causa recorrente de assinaturas que verificam localmente e falham em produção.
Saídahex ou base64hexOs mesmos bytes em duas renderizações. Hex é o que ferramentas de linha de comando imprimem; base64 é o que muitos cabeçalhos HTTP carregam.

Perguntas frequentes

Posso usar isto para fazer hash de senhas?

Não — e esta é a resposta mais importante da página. Todo algoritmo aqui é projetado para ser rápido, e rapidez é exatamente o que você não quer para uma senha: um atacante com o seu banco de dados e uma GPU testa bilhões de candidatos por segundo. Use bcrypt, scrypt ou Argon2, todos com um fator de custo ajustável que torna cada tentativa cara. Adicionar sal a um SHA-256 ajuda contra rainbow tables e não faz nada contra um rig de quebra moderno.

O MD5 está realmente quebrado se ainda é usado em todo lugar?

As duas coisas são verdadeiras. Colisões são práticas — dá para produzir dois arquivos com o mesmo MD5 em um laptop — e colisões de MD5 foram usadas em um ataque real para falsificar um certificado de assinatura de código da Microsoft. Ele continua em todo lugar como checksum sem função de segurança, em ETags e checagens de integridade de arquivo contra corrupção acidental, e esse uso é tranquilo. O problema é qualquer uso em que um adversário escolhe a entrada.

Por que meu digest difere do de outra ferramenta?

Quase sempre é a entrada, não o algoritmo. Procure uma quebra de linha final — um arquivo termina com uma e uma caixa de texto geralmente não, e um único byte muda tudo. Depois confira a codificação: esta página usa UTF-8, e uma ferramenta com padrão Latin-1 dará um digest diferente para qualquer caractere fora do ASCII. Por fim, veja se a outra ferramenta fez o hash dos bytes do arquivo ou da representação base64 dele.

Para que serve o HMAC?

Provar que uma mensagem veio de quem tem um segredo compartilhado e não foi modificada. É o que assina um payload de webhook, uma requisição de API e um cookie de sessão. O motivo de ser uma primitiva distinta, em vez de simplesmente fazer o hash da chave junto com a mensagem, é a extensão de comprimento: com a maioria dos hashes, conhecer H(key || message) permite que um atacante calcule um digest válido para uma mensagem mais longa sem a chave. A construção aninhada do HMAC impede isso.

Qual SHA devo usar?

SHA-256, a menos que você tenha um motivo para outro — é o padrão em todo lugar, bem analisado e rápido o bastante. SHA-512 é genuinamente mais rápido em hardware de 64 bits, apesar da saída mais longa. SHA-384 é SHA-512 truncado, o que o torna imune à extensão de comprimento, e é a escolha certa se você está construindo algo que faz o hash de um segredo diretamente em vez de usar HMAC.

Minha entrada é enviada?

Não. O hash de SHA usa o SubtleCrypto embutido do navegador; MD5 e CRC32 são implementados em JavaScript nesta página porque o SubtleCrypto se recusa de propósito a implementar MD5. Nada sai da aba, o que importa porque as coisas que as pessoas fazem hash costumam ser segredos de API, tokens e conteúdos de arquivos.