2014-01-02 3 views
0

В моем приложении Perl мне нужно сравнить две версии файла и определить, были ли они изменены.Выполнение алгоритмов файла Hash

Я пытаюсь выбрать между MD5 или SHA. Речь идет не о безопасности. Это самый быстрый способ сравнить файлы. Я склонен к MD5.

Однако, когда я запускал тесты, это предполагает иное.

Любые рекомендации?

Вот тест, который я использовал с самым большим файлом в моем приложении.

Benchmark: timing 10000000 iterations of MD5, SHA... 
    MD5: -0.199009 wallclock secs (0.07 usr + 0.01 sys = 0.08 CPU) @ 125000000.00/s (n=10000000) 
     (warning: too few iterations for a reliable count) 
    SHA: 0.494412 wallclock secs (0.06 usr + 0.00 sys = 0.06 CPU) @ 166666666.67/s (n=10000000) 
     (warning: too few iterations for a reliable count) 
     Rate MD5 SHA 
MD5 125000000/s -- -25% 
SHA 166666667/s 33% -- 
+5

Предупреждение: слишком много итераций для достоверного подсчета значимо. Это может помочь, если вы разместите тестовый код. Интересно отметить, что Git использует SHA1 как средство обнаружения изменений в файлах, находящихся под его контролем. – DavidO

+0

'my $ results = timethese (10000000, { 'SHA' => & hashsha, 'MD5' => & hashmd5, }); cmpthese ($ results); sub hashsha { my $ sha = новый дайджест :: SHA (256); \t \t \t $ sha-> addfile ($ file, "b"); \t \t \t возвращение $ sha-> hexdigest(); ## сделать эквивалентами 2 файла контрольных сумм } суб hasmd5 { если (открытый (мой $ ФХ, "<$ файла")) { \t \t \t \t binmode ($ ФХ); \t \t \t \t my $ md5 = новый дайджест :: MD5(); \t \t \t \t $ md5-> addfile ($ fh); \t \t \t \t return $ md5-> hexdigest(); } ## сделать eq из 2 контрольных сумм файла } ' – user3154696

+0

В принципе, мой метод выполняет экв из двух контрольных сумм из 2-х файлов – user3154696

ответ

6

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

+0

Действительно. Если для чтения данных с диска требуется 5 полных секунд, неужели важно, имеет ли алгоритм хеширования несколько миллисекунд медленнее, чем это могло бы быть? –

+0

Будучи оптимистом относительно чтения диска, я немного склонен к MD5, как рекомендуется. Но мне было просто интересно, почему SHA показал лучший бенчмарк, чем MD5. – user3154696

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