零字节文本文件如何在使用 sha1sum、sha256sum 等进行哈希处理时生成哈希值?程序对哪些数据进行哈希处理以生成哈希值?
塔
答案1
哈希算法读取输入并处理它,无论是否有数据。这是一种有效且需要的行为,甚至用于验证某种实现是否正确。这导致所有主要算法都出现“零哈希”。
总结一下:da39a3ee5e6b4b0d3255bfef95601890afd80709 是所有地方的空文件的 sha1-hash,其他算法的空哈希也是如此。
答案2
Quick Hash 中的所有哈希算法都是Merkle–Damgård 结构. 因此,他们将消息填充为块大小的倍数。
Quick Hash 的算法通过附加一个1
位、所需的多个0
位以及最终的消息长度来实现这一点。
这允许对任意长度的消息进行散列,包括零长度消息。
答案3
(对 Dennis 和 fixer1234 的回答有补充吗?)
简洁地说:
$ shasum -a 256 /dev/null e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 /dev/null
所有 0 字节文件都有相同的校验和。
$ shasum -a 512 /dev/null cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e /dev/null
$ shasum /dev/null da39a3ee5e6b4b0d3255bfef95601890afd80709 /dev/null
$ md5 /dev/null MD5 (/dev/null) = d41d8cd98f00b204e9800998ecf8427e
(注意:MD5 已损坏;它不是“安全哈希”。这在 Wikipedia 中的 MD5 条目中有记录。)
因此,例如,如果你试图验证文件的无害性病毒总站使用此处列出的安全哈希值之一,例如,da39a3ee5e6b4b0d3255bfef95601890afd80709
那么您可以确信该文件确实为 0 字节(或者是一个文件夹,令人困惑的是,virustotal 会将其哈希处理为一个 0 字节文件。)