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


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


Ответы:
Хеш-алгоритмы читают ввод и обрабатывают его, независимо от того, есть ли вообще данные. Это допустимое и требуемое поведение и даже используется для проверки правильности определенной реализации. Это приводит к «нулевым хэшам» для всех основных алгоритмов.
Подводя итог: da39a3ee5e6b4b0d3255bfef95601890afd80709 - это sha1-хэш для пустого файла везде, то же самое верно и для нулевых хэшей других алгоритмов.
Все алгоритмы хеширования в Quick Hash являются конструкциями Меркля – Дамгарда . Таким образом, они дополняют сообщение кратным размеру блока.
Алгоритмы Quick Hash достигают этого, добавляя 1бит, столько 0битов, сколько необходимо, и, наконец, длину сообщения.
Это позволяет хэшировать сообщения произвольной длины, включая сообщения нулевой длины.
(Дополнение к ответу Денниса и 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-байтовый файл.)