我知道如何通过horner的方法得到散列字符串的值,这样就需要三个参数String str , int p (prime) and int
m
p(str)=( sumOf(str(0)+str(1)*M+....+str(n)*M^n) )%p = hashVal
但问题是如何通过给出hashVal,p和M来获取字符串str
例如,如果我给你hashval=7
,p = 11
和M = 2
,你必须给我一个字符串,例如“你好”(不仅仅是一个理解的建议)
我的意思是我不知道怎么做反过来
并感谢您的帮助
答案 0 :(得分:0)
您无法从您描述的哈希中获得唯一的输入,因为模运算会抛弃信息。如果你知道hashval是7,M = 2和p = 11,就像在你的例子中一样,你不知道sumOf(...)是7还是18,等等。
即使你这样做,也就是说你知道它是5,对于一个示例的2个字符的字符串,你将无法确定str(0)是1还是str(1)是2,例如,或者str(0)为5,str(1)为0。
哈希通常很难/不可能逆转,尤其是唯一的。解决它们的最简单方法是散列所有可能的输入并检查它们的输出。你最终会得到许多具有相同hashVal的输入(如果你的例子中的p是3只有3个不同的哈希值)。