Генерация SHA256 отличается для файла и содержимого этого файла - PullRequest
3 голосов
/ 06 июня 2019

Я использую онлайн-конвертеры SHA256 для вычисления хеша для данного файла. Там я увидел эффект, которого не понимаю.

В целях тестирования я хотел вычислить хеш для очень простого файла. Я назвал его «test.txt», и его единственным содержимым является строка «abc», за которой следует новая строка (я только что нажал Enter).

Теперь, когда я помещаю "abc" и символ новой строки в генератор SHA256, я получаю хэш

edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb

Но когда я помещаю весь файл в тот же генератор, я получаю хэш

552bab6864c7a7b69a502ed1854b9245c0e1a30f008aaa0b281da62585fdb025

Откуда эта разница? Я использовал этот генератор (на самом деле, я пробовал несколько, и они всегда дают один и тот же результат):

https://emn178.github.io/online-tools/sha256_checksum.html

Обратите внимание, что это другое не возникает без перевода строки. Если файл содержит только строку «abc», хеш равен

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

для файла, а также только для содержимого.

Ответы [ 2 ]

3 голосов
/ 06 июня 2019

Как отмечается в моем комментарии, разница вызвана тем, как символы новой строки представлены в разных операционных системах (см. Подробности здесь ):

  • В UNIX и UNIX-подобныхВ системах новые строки представлены символом перевода строки (\n).
  • В системах DOS и Windows новые строки представлены переводом каретки, за которым следует символ перевода строки (\r\n).

Сравните следующие две команды и их вывод, соответствующие значениям SHA256 в вашем вопросе:

echo -en "abc\n" | sha256sum
edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb

echo -en "abc\r\n" | sha256sum
552bab6864c7a7b69a502ed1854b9245c0e1a30f008aaa0b281da62585fdb025
2 голосов
/ 06 июня 2019

Проблема, с которой вы столкнулись, может быть связана с кодировкой символов новой строки.В Windows новая строка экранируется с помощью \ r \ n, а в linux - \ n.

Эти 2 имеют другое значение dec (\ r равно 13 и \ n равно 10).

Более подробную информацию вы можете найти здесь:

https://en.wikipedia.org/wiki/Newline https://en.wikipedia.org/wiki/List_of_Unicode_characters

...