0

ELFHash で同じハッシュ値を生成する、アルファベット文字のみで構成される 2 つの文字列の例を挙げられる人はいますか?

コードをテストするにはこれらが必要です。しかし、簡単に生産できるものではないようです。そして驚いたことに、インターネット上にはさまざまなハッシュ関数のサンプルコードがたくさんありますが、衝突した文字列の例を提供しているものはありません。

必要な場合に備えて、以下に 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);
}
4

1 に答える 1

2

強引な方法を使用して衝突を見つけることができます (たとえば、長さが 5 未満のすべての可能な文字列を計算します)。

衝突の例(私がそのようにして得たもの):

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

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

hash = 5301994:
---------------
KYQYZ
KYQZJ
KYRIZ
KYRJJ
KZAYZ
于 2011-05-07T10:43:37.673 に答える