Какая функция PHP использует такой алгоритм хеширования? - PullRequest
2 голосов
/ 19 ноября 2010
   1. static inline ulong zend_inline_hash_func(char *arKey, uint nKeyLength)
   2. {
   3.     register ulong hash = 5381;
   4.  
   5.     /* variant with the hash unrolled eight times */
   6.     for (; nKeyLength >= 8; nKeyLength -= 8) {
   7.         hash = ((hash << 5) + hash) + *arKey++;
   8.         hash = ((hash << 5) + hash) + *arKey++;
   9.         hash = ((hash << 5) + hash) + *arKey++;
  10.         hash = ((hash << 5) + hash) + *arKey++;
  11.         hash = ((hash << 5) + hash) + *arKey++;
  12.         hash = ((hash << 5) + hash) + *arKey++;
  13.         hash = ((hash << 5) + hash) + *arKey++;
  14.         hash = ((hash << 5) + hash) + *arKey++;
  15.     }
  16.     switch (nKeyLength) {
  17.         case 7: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
  18.         case 6: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
  19.         case 5: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
  20.         case 4: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
  21.         case 3: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
  22.         case 2: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
  23.         case 1: hash = ((hash << 5) + hash) + *arKey++; break;
  24.         case 0: break;
  25. EMPTY_SWITCH_DEFAULT_CASE()
  26.     }
  27.     return hash;
  28. }

Ответы [ 2 ]

4 голосов
/ 19 ноября 2010

Все хеш-таблицы используют этот алгоритм хеширования;Хеш-таблицы в PHP используются, например, для реализации массивов и таблиц символов, среди многих других вещей.

Алгоритм, как указано в заголовке , - это DJBX33A (Даниэль Дж. Бернштейн,Раз 33 с дополнением).

1 голос
/ 19 марта 2013

Вы можете использовать эту ссылку, чтобы увидеть, где используется эта функция: http://lxr.php.net/search?q=+zend_inline_hash_func&defs=&refs=&path=&hist=&project=PHP_5_4

похоже, что есть 3 расширения php (включая стандартные), где используется эта функция.

...