Como um arquivo de texto de zero byte gera um hash quando hash com sha1sum, sha256sum etc? Quais dados os programas estão fazendo o hash para gerar um valor de hash?
Ta
Como um arquivo de texto de zero byte gera um hash quando hash com sha1sum, sha256sum etc? Quais dados os programas estão fazendo o hash para gerar um valor de hash?
Ta
Respostas:
Os algoritmos de hash leem a entrada e a processam, independentemente de haver dados. Esse é um comportamento válido e desejado e é usado até para verificar se uma determinada implementação está correta. Isso leva a "hashes nulos" para todos os principais algoritmos.
Para resumir: da39a3ee5e6b4b0d3255bfef95601890afd80709 é o sha1-hash para um arquivo vazio em qualquer lugar, o mesmo se aplica aos hashs nulos de outros alrogritmos.
Todos os algoritmos de hash no Quick Hash são construções de Merkle – Damgård . Como tal, eles colocam a mensagem em um múltiplo do tamanho do bloco.
Os algoritmos do Quick Hash conseguem isso anexando um 1
bit, quantos 0
bits forem necessários e, finalmente, o tamanho da mensagem.
Isso permite mensagens de tamanho arbitrário, incluindo mensagens de tamanho zero.
(Complemento à resposta de Dennis e fixer1234?)
Sucintamente:
$ shasum -a 256 /dev/null
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 /dev/null
Todos os arquivos de 0 byte terão a mesma soma de verificação.
$ shasum -a 512 /dev/null
cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e /dev/null
$ shasum /dev/null
da39a3ee5e6b4b0d3255bfef95601890afd80709 /dev/null
$ md5 /dev/null
MD5 (/dev/null) = d41d8cd98f00b204e9800998ecf8427e
(observação: o MD5 está quebrado; não é um 'hash seguro'. Isso está documentado na entrada MD5 da Wikipedia.)
Assim, por exemplo, se você está tentando verificar a inocência de arquivos em virustotal.com com um dos valores seguros de hash listados aqui, por exemplo da39a3ee5e6b4b0d3255bfef95601890afd80709
, pode ter certeza de que o arquivo era realmente 0 bytes (ou era uma pasta que confuso, hashes como se fosse um arquivo de 0 byte.)