В моем приложении 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% --
Предупреждение: слишком много итераций для достоверного подсчета значимо. Это может помочь, если вы разместите тестовый код. Интересно отметить, что Git использует SHA1 как средство обнаружения изменений в файлах, находящихся под его контролем. – DavidO
'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
В принципе, мой метод выполняет экв из двух контрольных сумм из 2-х файлов – user3154696