LINUX.ORG.RU

Алгоритмы хеширования на PHP

 ,


0

1

Состряпал тест хеширования файлов. 2000 файлов картинок разных форматов от 100кб до 5мб весом. Вот результат:

md2 = 73.130051851273s
md4 = 1.5805160999298s
md5 = 1.5295400619507s
sha1 = 1.8539280891418s
sha224 = 3.4224729537964s
sha256 = 3.431783914566s
sha384 = 2.611517906189s
sha512 = 2.5202469825745s
ripemd128 = 2.4069240093231s
ripemd160 = 3.1849868297577s
ripemd256 = 2.3845269680023s
ripemd320 = 3.2612600326538s
whirlpool = 6.1333789825439s
tiger128,3 = 1.5854530334473s
tiger160,3 = 1.5959498882294s
tiger192,3 = 1.6586458683014s
tiger128,4 = 1.8626298904419s
tiger160,4 = 1.8279211521149s
tiger192,4 = 1.9125201702118s
snefru = 16.644582986832s
snefru256 = 16.684983968735s
gost = 9.5326619148254s
adler32 = 2.2671620845795s
crc32 = 2.3144159317017s
crc32b = 2.2535979747772s
salsa10 = 2.1906409263611s
salsa20 = 2.0354378223419s
haval128,3 = 2.7908668518066s
haval160,3 = 2.7654700279236s
haval192,3 = 2.7140572071075s
haval224,3 = 2.7211401462555s
haval256,3 = 2.6893358230591s
haval128,4 = 3.3569128513336s
haval160,4 = 3.3435878753662s
haval192,4 = 3.3383049964905s
haval224,4 = 3.3805019855499s
haval256,4 = 3.3863339424133s
haval128,5 = 3.92502784729s
haval160,5 = 4.0389449596405s
haval192,5 = 3.9581367969513s
haval224,5 = 3.922905921936s
haval256,5 = 3.9152710437775s

Может кому пригодится.


Ответ на: комментарий от drake

Что в самом коде теста может быть интересно :)
Ну если очень надо то вот:

foreach(hash_algos() as $alg){
$stime = microtime(true);
if($handle = opendir($img)){
$i=0;
while (false !== ($file = readdir($handle))){
if($i>=2000){break;}
if($file != "." && $file != ".."){
$f = hash_file($alg,$img.$file);
}
$i++;
}
}
echo $alg.' = '.(microtime(true)-$stime).«s\n»;
}

sebbio
() автор топика
Ответ на: комментарий от Chubakur

2000?

это откуда такой вывод? У него 2000 непонятных файлов, а не итераций. Такие тесты надо прогонять по 10000-100000 раз и смотреть усредненное за вычетом граничных. Иначе тут 90% результатов можно смело в погрешность списывать.

BaBL ★★★★★
()
Ответ на: комментарий от sebbio

Перед выполнением теста предварительно теже 2000 файлов были прочитаны впустую, дабы исключить этап кеширования

sebbio
() автор топика
Ответ на: комментарий от sebbio

while (false !== ($file = readdir($handle))){

ууу... вообще ни о чем. На таких числах тебе дисковая подсистема сама такие погрешности даст, что результаты в > /dev/null

BaBL ★★★★★
()
Ответ на: комментарий от BaBL

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

sebbio
() автор топика

Все функции реализовывались на php? Потому-что встроенная в php функция и написанная на php функция - разные вещи.

Dragon59 ★★
()
Ответ на: комментарий от sebbio

Разговор ни о чём

Хорошо. Запусти свой тест и yes в параллельном терминале.

в том то и дело, что алгоритм проходит по одним и тем же непонятным файлам, и списывать 90% в погрешность - это означает ваше не понимание в проводимом тесте.

в 90% погрешность - это не из-за непонятных файлов, читайте внимательно.

про кеширование вы ответили позже, чем я начал писать второе сообщение. Тут можно не обращать внимания, тем не менее, эти файлы следовало бы все таки поместить на RAMDRIVE вообще и тестировать там.

BaBL ★★★★★
()
Ответ на: комментарий от sebbio

Такие условия теперь:
1000 файлов несжимаемых данных (архивы и фото) от 100кб до 5мб
размещены на рам диске
проводилось 50 итераций
произведено предварительное кэширование файлов

Результаты:

md2 = 33.930041432381
md4 = 0.73912407875061
md5 = 0.72546715259552
sha1 = 0.87247499465942
sha224 = 1.6058168029785
sha256 = 1.611633682251
sha384 = 1.1831806087494
sha512 = 1.1926578235626
ripemd128 = 1.0996928071976
ripemd160 = 1.4874122428894
ripemd256 = 1.1179759407043
ripemd320 = 1.5518560647964
whirlpool = 2.9536092710495
tiger128,3 = 0.7528710269928
tiger160,3 = 0.75083747386932
tiger192,3 = 0.73747517108917
tiger128,4 = 0.87890111446381
tiger160,4 = 0.88533451080322
tiger192,4 = 0.87087676525116
snefru = 7.8675753450394
snefru256 = 7.8173328065872
gost = 4.4724437856674
adler32 = 1.0283404922485
crc32 = 1.0786525821686
crc32b = 1.0208096218109
salsa10 = 0.98249355792999
salsa20 = 0.9183526468277
haval128,3 = 1.2660353565216
haval160,3 = 1.2622418928146
haval192,3 = 1.2730714941025
haval224,3 = 1.2653629589081
haval256,3 = 1.2577321004868
haval128,4 = 1.5662942314148
haval160,4 = 1.5716190671921
haval192,4 = 1.5742216110229
haval224,4 = 1.5669899988174
haval256,4 = 1.5828818130493
haval128,5 = 1.865869307518
haval160,5 = 1.870834069252
haval192,5 = 1.8715120029449
haval224,5 = 1.8755216598511
haval256,5 = 1.8718606758118



Исходя из результатов - очевидно что первый вариант вполне адекватен в своих показателях, что подтвердило мои слова и опровергло все другие высказывания... Спасибо

sebbio
() автор топика
Ответ на: комментарий от sebbio

Я определяю какие изображения изменились с последнего индексирования.

Тогда почему в списке нет crc*?

d ★★★★
()
Ответ на: комментарий от sebbio

Прошу прощения за невнимательность, ожидал увидеть (по историческим причинам и по алфавиту) в начале списка.

Спасибо за тесты. Сам, кстати, пишу библиотеку хэш-функций.

d ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.