Як текстовий файл з нульовим байтом може генерувати хеш, коли хешировано з sha1sum, sha256sum тощо? Які дані програми хешують, щоб генерувати хеш-значення?
Та
Як текстовий файл з нульовим байтом може генерувати хеш, коли хешировано з sha1sum, sha256sum тощо? Які дані програми хешують, щоб генерувати хеш-значення?
Та
Відповіді:
Алгоритми хеша читають дані та обробляють його, незалежно від того, чи є дані взагалі. Це дійсна та потрібна поведінка і навіть використовується для перевірки правильності певної реалізації. Це призводить до "нульових хешів" для всіх основних алгоритмів.
Підсумовуючи це: da39a3ee5e6b4b0d3255bfef95601890afd80709 - це ша1-хеш для порожнього файлу скрізь, те ж саме і з нульовими хешами інших алгоритмів.
Всі алгоритми хешування у швидкому хеші - це конструкції Меркле – Дамгард . Таким чином, вони додають повідомлення до кратного розміру блоку.
Алгоритми 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-байтний файл.)