Hash 霍纳';s散列法

Hash 霍纳';s散列法,hash,hashcode,Hash,Hashcode,我知道如何通过horner的方法得到散列字符串的值,该方法采用三个参数:resstring str、int p(prime)和intm,如下所示 p(str)=( sumOf(str(0)+str(1)*M+....+str(n)*M^n) )%p = hashVal 但问题是如何通过只给出hashVal、p和M来获取字符串str 例如,如果我给你hashval=7,p=11和M=2你必须给我一个字符串,例如“hello”(不正确,只是一个理解的建议) 我的意思是我不知道如何做相反的事情 感谢

我知道如何通过horner的方法得到散列字符串的值,该方法采用三个参数:res
string str、int p(prime)和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
你必须给我一个字符串,例如“hello”(不正确,只是一个理解的建议) 我的意思是我不知道如何做相反的事情
感谢您的帮助

您无法从所描述的哈希中获得唯一的输入,因为模运算会丢弃信息。如果你知道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个不同的hash)。

您无法从所描述的hash中获得唯一的输入,因为模运算会丢弃信息。如果你知道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个不同的hash)。

哈希运算的目的不是说逆运算很难,如果不是不可能的话,找到唯一的?我知道这一点,但如果可能的话,我只想得到一个。你能给我解释一下怎么做吗,谢谢你,这不是散列的目的,逆是困难的,如果不是不可能的话,寻找独一无二的?我知道这一点,但如果可能的话,我只想得到一个。你能给我解释一下如何做到这一点,谢谢你能得到更多关于我在这里问的问题的信息吗