Расчет MD5 файла для гарантии целостности - PullRequest
4 голосов
/ 14 ноября 2008

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

Ответы [ 6 ]

5 голосов
/ 14 ноября 2008

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

Как вы создаете хеш MD5 для файла? Вы пытались использовать другой инструмент для воспроизведения проблемы?

Если есть другая подпись MD5, тогда ваши файлы будут отличаться.

Предыдущие предложения символов EOL или передачи двоичного файла в режиме ASCII очень вероятные причины, по которым файлы могут быть изменены. Использование diff tool может помочь определить, где / как файлы отличаются. Если ваш файл в двоичном формате, попробуйте использовать инструмент binary diff .

2 голосов
/ 14 ноября 2008

Простой способ выяснить это: запустить diff (я полагаю, двоичный файл, но, возможно, нет) против двух разных загрузок. Это должно быстро определить проблему.

0 голосов
/ 20 ноября 2008

Убедитесь, что вы на самом деле вычисляете MD5 на байтах файла, а не на имени файла или какой-либо другой строке.

0 голосов
/ 14 ноября 2008

Вы можете проверить свою теорию, хэшируя только определенную часть файла ... Скажем, средние 50% ... Если это не так, то вы знаете, что это не просто метка времени или что-то в этом роде. действительно нужно дать нам больше информации, чтобы получить лучший ответ ...

0 голосов
/ 14 ноября 2008

Если вы используете FTP для загрузки, проблема может быть:

  • Двоичная опция загрузки вместо ASCII (или наоборот).

  • Передача между платформами, например Windows в Unix, где лечится EOL разный.

0 голосов
/ 14 ноября 2008

Если я не совсем ошибаюсь, хеш md5 работает только с реальными данными, а не с метками времени и другими метаданными. Возможно, вы переносите текстовые файлы с помощью ftp, в этом случае ftpclient может переписать символы новой строки, чтобы они соответствовали вашей системе, и тогда хеш будет отличаться

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