How can a zero byte text file generate a hash when hashed with sha1sum, sha256sum etc? What data are the programs hashing to generate a hash value?
Super User is a question and answer site for computer enthusiasts and power users. It only takes a minute to sign up.Sign up to join this community
Hash algorithms read the input and process it, no matter if there's data at all. This is a valid and wanted behaviour and is even used to verify if a certain implementation is correct. This leads to "null-hashes" for all major algorithms.
To sum it up: da39a3ee5e6b4b0d3255bfef95601890afd80709 is the sha1-hash for an empty file everywhere, the same is true with the null-hashes of other alrogrithms.
All hash algorithms in Quick Hash are Merkle–Damgård constructions. As such, they pad the message to a multiple of the block size.
Quick Hash's algorithms achieve this by appending a
1 bit, as many
0 bits as needed, and finally the message length.
This allows hashing messages of arbitrary length, including zero-length messages.
(Add-on to Dennis and fixer1234's answer?)
$ shasum -a 256 /dev/null
All 0-byte files will have the same checksum.
$ shasum -a 512 /dev/null
$ shasum /dev/null
$ md5 /dev/null
MD5 (/dev/null) = d41d8cd98f00b204e9800998ecf8427e (note: MD5 is broken; it's not a 'secure hash'. This is documented in the MD5 entry in Wikipedia.)
Thus, for example, if you're trying to verify the innocuousness of files at virustotal.com with one of the secure hash values listed here, e.g.
da39a3ee5e6b4b0d3255bfef95601890afd80709 then you can be confident that the file was indeed 0 bytes (or was a folder, which virustotal, confusingly, hashes as if it's a 0-byte file.)