Я использую ELF Hash для написания специально настроенной версии хэш-карты.Желая производить столкновения - PullRequest
0 голосов
/ 07 мая 2011

Может ли кто-нибудь привести пример 2 строк, состоящих только из буквенных символов, которые будут выдавать одинаковое значение хеш-функции с ELFHash?

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

Ниже приведен хэш-файл ELF, если вам это нужно.

unsigned int ELFHash(const std::string& str)
{
   unsigned int hash = 0;
   unsigned int x    = 0;

   for(std::size_t i = 0; i < str.length(); i++)
   {
      hash = (hash << 4) + str[i];
      if((x = hash & 0xF0000000L) != 0)
      {
         hash ^= (x >> 24);
         hash &= ~x;
      }
   }

   return (hash & 0x7FFFFFFF);
}

1 Ответ

1 голос
/ 07 мая 2011

Вы можете найти столкновения, используя метод грубой силы (например, вычислить все возможные строки длиной менее 5).

Некоторые примеры столкновений (которые я получил таким образом):

hash = 23114:
-------------
UMz
SpJ

hash = 4543841:
---------------
AAAAQ
AAABA

hash = 5301994:
---------------
KYQYZ
KYQZJ
KYRIZ
KYRJJ
KZAYZ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...