Контрольная сумма MD5 всего файла отличается от контрольной суммы содержимого - PullRequest
2 голосов
/ 09 сентября 2011

Я создал файл a.txt, содержащий одно слово - 'собака'.

Вот контрольная сумма MD5:

$md5sum a.txt

c52605f607459b2b80e0395a8976234d  a.txt

Вот контрольная сумма MD5 слова dog:

$perl -e "use Digest::MD5 qw(md5_base64 md5_hex); print(md5_hex('dog'));"

06d80eb0c50b49a509b49f2424e8c805

Почему контрольные суммы разные?

Спасибо,

Мартин

Ответы [ 3 ]

5 голосов
/ 09 сентября 2011

Предположительно, у вас есть новая строка в конце файла. Попробуйте использовать echo -n:

$ perl -e "use Digest::MD5 qw(md5_base64 md5_hex); print(md5_hex('dog'));"
06d80eb0c50b49a509b49f2424e8c805
$ echo 'dog' >a.txt
$ md5sum a.txt
362842c5bb3847ec3fbdecb7a84a8692  a.txt
$ echo -n 'dog' >a.txt
$ md5sum a.txt
06d80eb0c50b49a509b49f2424e8c805  a.txt

Это довольно распространенный вопрос:

0 голосов
/ 24 октября 2016

Когда вы выполняете и MD5-расчет файла (txt в вашей ситуации), все содержимое файла учитывается, даже контрольные символы (EOF, SOH, LF, CR), они не являются печатными символами, но имеют некоторые значения HEXAкоторый изменяет соответствующий результат MD5, который отличается от результата простой передачи строки в функцию MD5.

0 голосов
/ 09 сентября 2011

md5_base64 - это просто объявление функции.

use Digest::MD5 qw(md5_base64 md5_hex)

означает, что я могу использовать функции md5_base64 () или md5_hex () из библиотеки Digest :: MD5

По сути, вы можете использовать другие инструменты, кроме Perl, для вычисления MD5-хеша слова ...

Мне интересно, почему контрольная сумма файла (с использованием md5sum) отличается от контрольной суммы самого содержимого ...

Добавляет ли md5sum некоторую информацию о файле в контент перед вычислением MD5? Или есть какой-нибудь символ "конец файла"?

Спасибо за ваше время ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...