LINUX.ORG.RU

[php][hash] Какой самый быстрый алгоритм?

 ,


0

1

Нужен быстрейший хеш-алгоритм, из стандартных, на php.

Поток, сравнение идёт по 30-40 хешам от файлов, так что коллизии не особо волнуют, но сами файлы объемные, до 20 мегабайт.

Таблиц скорости в гугле не нашёл вот…

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

Ну если никто с этим не сталкивался, то напишу

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

попробуй

static unsigned long calc_hash(char* str){ unsigned long hash = 0; int c; while ((c = *str++)) hash = c + (hash << 6) + (hash << 16) - hash; return hash; }

(это алгоритм Беркли) скорее всего подойдёт. Могу послать ещё пару.

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

По идее, уже вписанный в виде C библиотеки сам-себе быстрее, чем интерпретируемый.

[0] => md2 [1] => md4 [2] => md5 [3] => sha1 [4] => sha224 [5] => sha256 [6] => sha384 [7] => sha512 [8] => ripemd128 [9] => ripemd160 [10] => ripemd256 [11] => ripemd320 [12] => whirlpool [13] => tiger128,3 [14] => tiger160,3 [15] => tiger192,3 [16] => tiger128,4 [17] => tiger160,4 [18] => tiger192,4 [19] => snefru [20] => snefru256 [21] => gost [22] => adler32 [23] => crc32 [24] => crc32b [25] => salsa10 [26] => salsa20 [27] => haval128,3 [28] => haval160,3 [29] => haval192,3 [30] => haval224,3 [31] => haval256,3 [32] => haval128,4 [33] => haval160,4 [34] => haval192,4 [35] => haval224,4 [36] => haval256,4 [37] => haval128,5 [38] => haval160,5 [39] => haval192,5 [40] => haval224,5 [41] => haval256,5

доступны, но кто из них самый простой - фиг его. Пилю тест

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

а зачем брать файлы целиком?

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

md2 0.69704294204712
md4 0.014407873153687
md5 0.017338991165161
sha1 0.023236036300659
sha224 0.066130876541138
sha256 0.066886186599731
sha384 0.045138120651245
sha512 0.044938087463379
ripemd128 0.044964075088501
whirlpool 0.13638401031494
tiger128,3 0.021517038345337
snefru 0.33339285850525
gost 0.16579484939575
adler32 0.034798860549927
crc32 0.035469055175781
crc32b 0.030153036117554
salsa10 0.038793802261353
haval128,3 0.047761917114258

Fail. Все оказались на фоновом уровне. Использовался 5-и мегабайтный mp3 файл.

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

>Fail. Все оказались на фоновом уровне. Использовался 5-и мегабайтный mp3 файл.

Тебя кто учил тесты делать. Бери сотню файлов, будет более адекватное время.

anonymous
()
Ответ на: комментарий от Deleted

да, проглядел CRC в середине. Думал, только энкриптовые идут практически в порядке увеличения сложности.

И да, md2 слил md4 потому что первый оптимизирован под 8-битовые машины, а md4 делает большими блоками.

anonymous
()
Ответ на: комментарий от alexmaru

сделай сдвиги в своём PHP - как я показал на си. Простой полином.

И удивись скорости.

Забросишь все криптохэши сразу.

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

Тебя кто учил тесты делать. Бери сотню файлов, будет более адекватное время.

ИМХО лучше генерировать случайные данные в программе и тут же считать от них хеш. Для надёжности перед тестированием каждого следующего алгоритма сбрасывать random seed на одно и то же значение (на случай, если скорость работы зависит не только от количества данных).

Deleted
()
Ответ на: комментарий от anonymous

вот ещё один из паблик домейна (sdbm):

unsigned long sdbm(unsigned char *str){ unsigned long hash = 0; int c; while ((c = *str++)) hash = c + (hash << 6) + (hash << 16) - hash; return hash; }

или алгоритм Бернштейна:

unsigned long hash(unsigned char *str){ unsigned long hash = 5381; int c; while ((c = *str++)) hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ return hash; }

но лучше Бекли ДБ:

static unsigned long calc_hash(char* str){ unsigned long hash = 0; int c; while ((c = *str++)) hash = c + (hash << 6) + (hash << 16) - hash; return hash; }

anonymous
()
Ответ на: комментарий от Deleted

ему наверное надо детерминистический алгорим. Как он потом проверять будет? (как сгенерить тот же рендом? :)

anonymous
()

>так что коллизии не особо волнуют


filesize :)

anTaRes ★★★★
()

adler32

он не так хорошо хеширует но зато ИЗНАЧАЛЬНО разрабатывался для скорости

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

md2 слил md4 потому что

Файла в кэше не было. Не надо искать дурацких причин.

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