零字节文件如何生成哈希值?


20

用sha1sum,sha256sum等进行哈希处理时,零字节文本文件如何生成哈希?程序对哪些数据进行哈希处理以生成哈希值?

Linux中的QuickHash

终端命令

Answers:


21

哈希算法会读取输入并进行处理,无论是否有数据。这是一种有效的通缉行为,甚至可以用来验证某个实现是否正确。这导致所有主要算法的“空哈希”。

总结一下:da39a3ee5e6b4b0d3255bfef95601890afd80709是到处都是空文件的sha1哈希,对于其他算法的null哈希也是如此。


1
好吧,您每天都学到新东西!我不知道每个算法都有一个“空值”。非常感谢。
Gizmo_the_Great

3
散列算法具有预定的初始条件-类似于数字,它们以其开头并在读取数据时发生变异。如果没有要读取的数据,则哈希只是该预设初始条件的结果。
凯文

原因也是因为sha1算法附加了数据的长度(在这种情况下为零),并且在消息中也添加了一些标志和填充。因此,即使“无数据”也将导致某些数据被处理。
user92979'1

14

快速哈希中的所有哈希算法都是Merkle–Damgård构造。这样,它们会将消息填充为块大小的倍数。

Quick Hash的算法通过在需要的地方添加1一点,0最后增加消息长度来实现此目的。

这允许散列任意长度的消息,包括零长度消息。


如果我的编辑原因令人困惑,那么我起初会误读您的答案,然后改写“为清楚起见”,然后意识到我的编辑是错误的,然后回过头来修复了它。系统将这两种解释合并在一起,因为它在同一时间范围内。
fixer1234

1

(附加到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条目中有记录。)

因此,例如,如果您尝试使用此处列出的安全哈希值之一来验证virustotal.com上文件的安全性,da39a3ee5e6b4b0d3255bfef95601890afd80709那么您可以确定文件确实为0字节(或为文件夹,令人迷惑的是,病毒总数就像是一个0字节的文件一样散列。)


这如何增加当前答案?
马塔·朱哈斯(MátéJuhász)

通过为怀疑者提供一种直接的方法,以验证所有0字节文件是否都具有相同的校验和,当在virustotal.com上讨论0字节文件的无害性时,许多人对此表示怀疑。因此,我认为这为解决此问题的人增加了一种解决方案,即不确定校验和是否为cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63a81d
马修·艾维
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.