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


20

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

Ta

QuickHash в Linux

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

Ответы:


21

Хеш-алгоритмы читают ввод и обрабатывают его, независимо от того, есть ли вообще данные. Это допустимое и требуемое поведение и даже используется для проверки правильности определенной реализации. Это приводит к «нулевым хэшам» для всех основных алгоритмов.

Подводя итог: da39a3ee5e6b4b0d3255bfef95601890afd80709 - это sha1-хэш для пустого файла везде, то же самое верно и для нулевых хэшей других алгоритмов.


1
Ну, вы узнаете что-то новое каждый день! Я не знал, что существует «нулевое значение» для каждого алгоритма. Большое спасибо.
Gizmo_the_Great

3
Алгоритмы хеширования имеют предопределенное начальное условие - вроде числа, с которого они начинаются и изменяются при чтении данных. Если нет данных для чтения, хеш является просто результатом этого предустановленного начального условия.
Кевин

Причина также в том, что алгоритм sha1 добавляет длину данных (в данном случае - ноль), и в сообщение также добавляются некоторые флаги и отступы. Таким образом, даже «нет данных» все равно приведет к обработке некоторых данных.
user92979

14

Все алгоритмы хеширования в Quick Hash являются конструкциями Меркля – Дамгарда . Таким образом, они дополняют сообщение кратным размеру блока.

Алгоритмы Quick Hash достигают этого, добавляя 1бит, столько 0битов, сколько необходимо, и, наконец, длину сообщения.

Это позволяет хэшировать сообщения произвольной длины, включая сообщения нулевой длины.


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

1

(Дополнение к ответу Денниса и 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

Предоставляя скептику прямой способ убедиться в том, что все 0-байтовые файлы будут иметь одинаковую контрольную сумму Несколько человек скептически отнеслись к этому при обсуждении безобидности 0-байтовых файлов на virustotal.com. Поэтому я думаю, что это добавляет к решению способ для тех, кто приходит к этому вопросу, не уверенный, правда ли, что если контрольная сумма равна cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d28b031a0a0a0b532641323151323155
Мэтью Элви
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.