Как файлы с нулевым байтом могут генерировать хеш-значение?

6990
Gizmo_the_Great

Как текстовый файл с нулевым байтом может генерировать хеш при хэшировании с помощью sha1sum, sha256sum и т. Д.? Какие данные хешируются программами для генерации хеш-значения?

Ta

QuickHash в Linux

Терминальные команды

19

3 ответа на вопрос

20
Sascha Kaupp

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.

Ну, вы узнаете что-то новое каждый день! Я не знал, что существует «нулевое значение» для каждого алгоритма. Большое спасибо. Gizmo_the_Great 11 лет назад 1
Алгоритмы хеширования имеют предопределенное начальное условие - вроде числа, с которого они начинаются и изменяются при чтении данных. Если нет данных для чтения, хеш является просто результатом этого предустановленного начального условия. Kevin 11 лет назад 2
Причина также в том, что алгоритм sha1 добавляет длину данных (в данном случае - ноль), и в сообщение также добавляются некоторые флаги и отступы. Таким образом, даже «нет данных» все равно приведет к обработке некоторых данных. user92979 7 лет назад 0
14
Dennis

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.

Если моя причина редактирования сбивает с толку, я сначала неправильно прочитал ваш ответ и перефразировал его «для ясности», затем понял, что мое редактирование было неправильным, и вернулся и исправил его. Система объединила два объяснения, потому что это было в том же временном окне. fixer1234 9 лет назад 0
1
Matthew Elvey

(Дополнение к ответу Денниса и 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 не работает; это не «безопасный хеш». Это описано в записи MD5 в Википедии.)

Так, например, если вы пытаетесь проверить безвредность файлов на virustotal.com с помощью одного из перечисленных здесь значений безопасного хеша, например, da39a3ee5e6b4b0d3255bfef95601890afd80709тогда вы можете быть уверены, что файл действительно был 0 байтов (или был папкой, которая virustotal, запутанно, хэширует, как будто это 0-байтовый файл.)

Как это добавляет к текущим ответам? Máté Juhász 6 лет назад 0
Предоставляя скептику прямой способ убедиться в том, что все 0-байтовые файлы будут иметь одинаковую контрольную сумму. Несколько человек скептически отнеслись к этому при обсуждении безвредности 0-байтовых файлов на virustotal.com. Таким образом, я думаю, что это добавляет к решению способ для тех, кто приходит к этому вопросу, не уверенный, если это правда, что если контрольная сумма cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d28b031a0a0b037332641325151323155 Matthew Elvey 6 лет назад 0

Похожие вопросы