Utilia

Gerador de hash

Gera hashes MD5, SHA-1, SHA-256 e SHA-512 de texto ou de ficheiros de qualquer tamanho e verifica checksums. Tudo corre no teu navegador.

Calcular hash de
O texto é codificado em UTF-8.
Algoritmos

Como usar o gerador de hash

  1. Em Calcular hash de, escolhe Texto ou Ficheiros.
  2. Para texto, escreve-o ou cola-o em Texto a converter em hash. Os hashes atualizam-se enquanto escreves; o botão Calcular hash volta a calculá-los quando quiseres.
  3. Para ficheiros, larga um ou mais ficheiros na zona de largar ou clica nela para os escolher. Nos ficheiros grandes aparece uma barra de progresso, com um botão Cancelar.
  4. Seleciona os Algoritmos de que precisas (MD5, SHA-1, SHA-256, SHA-512) e o Formato de saída: hexadecimal em minúsculas, hexadecimal em maiúsculas ou Base64.
  5. Para verificar uma transferência, cola o checksum publicado em Comparar com um hash esperado (opcional). A ferramenta diz-te que algoritmo corresponde, ou que nenhum corresponde.

O que é um hash?

Uma função de hash criptográfica transforma qualquer entrada, seja uma palavra ou uma imagem de disco de 50 GB, numa impressão digital curta de tamanho fixo. A mesma entrada dá sempre o mesmo hash, e mudar um único bit da entrada muda completamente o resultado. Não é possível reverter um hash para recuperar a entrada.

Algoritmo Tamanho do resultado Comprimento em hex Situação
MD5 128 bits 32 caracteres Quebrado: só para checksums
SHA-1 160 bits 40 caracteres Quebrado: colisões demonstradas em 2017
SHA-256 256 bits 64 caracteres Seguro, o padrão atual
SHA-512 512 bits 128 caracteres Seguro, muitas vezes mais rápido em processadores de 64 bits

Por exemplo, o hash SHA-256 de abc é ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.

Verificar uma transferência

Os autores de software publicam muitas vezes um checksum SHA-256 ao lado dos ficheiros. Depois de transferires, abre o modo Ficheiros, larga o ficheiro e cola o valor publicado no campo de comparação. Uma correspondência prova que o ficheiro não se corrompeu durante a transferência e é idêntico ao que o autor usou para calcular o hash. Não prova que o autor seja de confiança: para isso, o próprio checksum tem de vir de uma fonte fiável, como um site HTTPS ou uma versão assinada.

Como são tratados os ficheiros grandes

Os ficheiros são lidos localmente e nunca são enviados. Os ficheiros até 64 MB são processados de uma só vez com a API Web Crypto integrada no teu navegador. Os maiores são lidos em blocos de 4 MB e passados a funções de hash incrementais, por isso o uso de memória mantém-se estável e é possível calcular o hash de ficheiros com vários gigabytes. Num computador típico, conta com algumas centenas de megabytes por segundo em SHA-256.

Texto, codificações e fins de linha

Um hash é calculado sobre bytes, não sobre caracteres. Esta ferramenta codifica o texto em UTF-8, o padrão na web e na maioria das linguagens de programação. Se obtiveres um resultado diferente noutro sítio, procura diferenças escondidas: uma quebra de linha no fim (echo "abc" | sha256sum calcula o hash de abc\n; usa echo -n), fins de linha do Windows (\r\n) ou outra codificação, como UTF-16.

Perguntas frequentes

Posso usar MD5 ou SHA-1 para guardar palavras-passe?

Não, nem SHA-256 simples. Estas funções foram feitas para ser rápidas, por isso um atacante consegue testar milhares de milhões de tentativas por segundo. As palavras-passe precisam de um algoritmo lento e com salt, como Argon2, bcrypt ou scrypt.

O MD5 ainda serve para alguma coisa?

Sim, para detetar corrupção acidental, eliminar ficheiros duplicados ou confrontar uma lista antiga de checksums. Não se deve confiar nele contra adulterações deliberadas, porque qualquer pessoa consegue criar dois ficheiros diferentes com o mesmo MD5.

Os meus ficheiros são enviados?

Não. Os ficheiros são lidos e processados pelo teu navegador. Nada é enviado para um servidor, por isso podes calcular o hash de documentos confidenciais.

Porque é que o meu hash não coincide com o da linha de comandos?

A entrada é quase sempre diferente: uma quebra de linha no fim, espaços, fins de linha ou a codificação do texto. Nos ficheiros, confirma que a transferência ficou completa. Um único byte em falta dá um hash completamente diferente.

Qual é a diferença entre o resultado em hex e em Base64?

São duas formas de escrever os mesmos bytes. O hexadecimal é o formato habitual dos checksums; o Base64 é mais curto e é usado, por exemplo, nos atributos de Subresource Integrity (sha256-…). O campo de comparação aceita os dois.