使用给定的哈希函数查找冲突字符串

Find a collision string with a given hash function

我有一个字符串 anna,其中字符串中的字符值为 a = 1, n = 14 ( You can compute the value of other chars like ( char - 96 ),散列函数如下所示:

int hashCode( string s ) // s = "anna";
{
    k = 0;
    for ( int i = 0; i < s.length(); i++ )
      k = ( 7 * k + 3 * s[i] ) % 61;
    return k;
}

如何找到发生碰撞的长度为 3 的字符串(聪明的东西)?我想到的唯一方法是计算 annak,即 29,然后以某种方式想到另一个长度为 3 的字符串,它给出 29.

你为什么不简单地生成所有长度为 3 的字符串并计算它们的哈希值(事实上,当哈希函数的所有 61 个可能值都可以达到时你可以停止)?选项的数量不是太多。

一个可能的优化:如果你需要回答多个查询(比如给定一个字符串,找到一个长度为3且哈希函数值相同的字符串),你可以生成所有长度为3的字符串并计算它们的哈希值一次建地图hash -> a string of length 3 with this hash。一旦你有了这张地图,找到一个长度为 3 且与给定字符串具有相同散列的字符串只是一次地图查找。