2017-02-10 4 views
1

Мне нужно получить контрольную сумму md5 файла. Но у меня нет файла на диске, и я не могу его сохранить на диск. У меня есть только поток (сокет), откуда я могу прочитать файл.MD5 файла из потока. Perl

Как рассчитать контрольную сумму MD5 в этом случае и заставить ее быть такой же, как я бы вычислил ее для файла на диске?

Я могу читать куски любого размера потока. Возможно ли получить правильный MD5 для этого случая?

мне нужны инструкции макияжем md5sum из сумм кусков и получить тот же результат, как

md5sum filetohash.txt 

I-код с Perl.

ответ

3

Перед вычислением контрольной суммы нет необходимости собирать данные в полный файл. Вы можете добавить данные в кусках к Digest::MD5 объекту, как этот

my $md5 = Digest::MD5->new; 

while (my $chunk = read_stream()) { 
    $md5->add($chunk); 
} 

print $md5->hexdigest, "\n"; 
+0

Будет ли этот метод сохраняет все куски в памяти вместе, прежде чем, наконец, вычислить хэш-сумму? Или он выполняет некоторые действия каждый раз, когда вы вызываете $ md5-> add() и сохраняет только результат в памяти? –

Смежные вопросы