Um hash não volta atrás
A criptografia devolve o texto assim que você tem a chave. Um hash não tem essa chave: ele esmaga qualquer entrada, por maior que seja, num único valor de tamanho fixo, e nada nesse valor permite recuperar o original.
Por isso hashes respondem a uma só pergunta: essas duas coisas são iguais? O arquivo baixado bate com o valor publicado? A senha recém-digitada bate com a que está guardada? Se algo precisa ficar escondido e ser lido depois, o caminho é criptografia, não hash.
Qual algoritmo escolher
- MD5 — um projeto de 1991. Produzir duas entradas diferentes com o mesmo hash leva segundos num notebook. Ele sobrevive porque distribuidores ainda publicam somas MD5, e é preciso poder conferi-las.
- SHA-1 — em 2017 foram publicados dois PDFs que colidem. Não há razão para escolhê-lo em algo novo.
- SHA-256 — o padrão de hoje: certificados, assinaturas e blockchains ficam aqui.
- SHA-384 e SHA-512 — apoiam-se em operações de 64 bits, então numa máquina de 64 bits podem superar o SHA-256. Escolha quando quiser um resumo mais longo.
Para conferir integridade, SHA-256 basta. Se o distribuidor só publicou um MD5, compare com ele — mas avalie à parte se o download veio de uma fonte confiável.
Senhas precisam de mais que isso
Guardar uma senha como SHA-256 é melhor que deixá-la em texto puro, e ainda assim é má ideia. Funções de hash são feitas para serem rápidas, então um atacante testa bilhões por segundo, e toda senha comum já está numa tabela.
Use uma função feita para ser lenta: bcrypt, scrypt ou Argon2. Elas deixam você aumentar o custo de cálculo e aplicam um sal diferente por usuário. Não escreva a sua: use a que a linguagem já traz.
Mesmo arquivo, resumo diferente
Esta ferramenta calcula o hash dos bytes UTF-8 da sua entrada. Quando o resultado diverge de uma ferramenta de linha de comando, a diferença quase sempre é invisível na tela.
- Fim de linha — o
\r\ndo Windows e o\ndo Unix são bytes diferentes. - Uma quebra de linha no fim —
echoacrescenta uma por padrão. Tenteecho -nouprintf. - Um BOM — alguns editores colocam três bytes no começo do arquivo.