Вот рабочий процесс.Почему хеши MD5 для тех же данных отличаются от Linux и Windows?
- Клиент загружает файл XML и файл контрольной суммы MD5 на наш FTP.
- Сервер Perl копирует файл с FTP-сервера.
- Сервер Perl выполняет собственную проверку MD5 в файле XML, а затем сравнивает его со значением в файле MD5.
Два хеша MD5 никогда не совпадают. Но когда я копирую файл XML на свою машину Windows и запускаю тот же скрипт Perl, который работает в Windows, я получаю тот же ответ, что и файл MD5.
Может ли кто-нибудь сказать мне, что происходит?
Вот сценарий, который я использую, чтобы вычислить хэш MD5.
use warnings;
use strict;
use Digest::MD5;
my $fname = "MarketPricePoint_2013_07_16_1500.xml";
open (my $fh, '<', $fname) or die "Can't open '$fname': $!";
binmode ($fh);
my $hash = Digest::MD5->new->addfile($fh)->hexdigest;
print $hash;
Как файл передается с FTP? двоичный или текстовый режим? последний изменяет окончание строк, и, следовательно, контрольная сумма – amon
Является ли соглашение конца строки (* i.e., '" \ r \ n "' versus '" \ n "') одинаковым с обеих сторон? Помните, что режим ascii на FTP выполняет это преобразование. –