Python 我如何验证这个散列函数对于两个不同的字符串不会给出相同的结果?

Python 我如何验证这个散列函数对于两个不同的字符串不会给出相同的结果?,python,hash,hash-function,rabin-karp,Python,Hash,Hash Function,Rabin Karp,假设两个不同的字符串长度相同 我正在实现robin karp算法并使用下面的哈希函数: def hs(pat): l = len(pat) pathash = 0 for x in range(l): pathash += ord(pat[x])*prime**x # prime is global variable equal to 101 return pathash 这是一个杂烩。根据定义,不能保证不会发生冲突——否则,哈希值至少必须与哈希

假设两个不同的字符串长度相同

我正在实现robin karp算法并使用下面的哈希函数:

def hs(pat):
    l = len(pat)
    pathash = 0
    for x in range(l):
        pathash += ord(pat[x])*prime**x # prime is global variable equal to 101
    return pathash

这是一个杂烩。根据定义,不能保证不会发生冲突——否则,哈希值至少必须与哈希值一样长

你所做的背后的想法是基于数论的:一个与你的有限群大小互质的数的幂(可能是最初的作者的意思是2^N)可以给你这个有限群中的任何数,而且很难分辨它们是哪一个


不幸的是,这个散列函数的有趣部分,即散列的大小限制/模运算,已经从这段代码中漏掉了——这让人想知道你的代码来自哪里。据我所知,这与拉宾·卡布没有什么关系。

这是一个杂凑。根据定义,不能保证不会发生冲突——否则,哈希值至少必须与哈希值一样长

你所做的背后的想法是基于数论的:一个与你的有限群大小互质的数的幂(可能是最初的作者的意思是2^N)可以给你这个有限群中的任何数,而且很难分辨它们是哪一个


不幸的是,这个散列函数的有趣部分,即散列的大小限制/模运算,已经从这段代码中漏掉了——这让人想知道你的代码来自哪里。据我所知,这与Rabin Karb没有什么关系。

您试图做的是碰撞攻击,它需要大量的计算能力,因此您可能需要购买一台功能强大的计算机来完成此操作task@ArpitSolanki胡特?不。@ArpitSolanki不,你没有。这不是上面提到的合适的散列算法。我们可以很快把你得到的数字分解成101的幂;这里没有不可逆的操作。(假设作战需求文件(c)<101)@niravbharadiya冲突无法避免。这是哈希值比字符串短这一事实的结果。某些字符串必须具有相同的哈希,否则它不是哈希。如果限制输入中的字符(例如将其限制为ASCII),则可以避免冲突。如果没有这样的限制,很容易找到冲突:
hs('f\1')==hs('\1\2')
例如,您试图进行的是冲突攻击,它需要大量的计算能力,因此您可能需要购买一台功能强大的计算机来完成此操作task@ArpitSolanki胡特?不。@ArpitSolanki不,你没有。这不是上面提到的合适的散列算法。我们可以很快把你得到的数字分解成101的幂;这里没有不可逆的操作。(假设作战需求文件(c)<101)@niravbharadiya冲突无法避免。这是哈希值比字符串短这一事实的结果。某些字符串必须具有相同的哈希,否则它不是哈希。如果限制输入中的字符(例如将其限制为ASCII),则可以避免冲突。如果没有这样的限制,很容易找到冲突:
hs('f\1')==hs('\1\2')
。例如,此哈希函数没有边界。如果参数的单个字符受到限制,则0@JamesKPolk确切地缺少的是某种边界函数,否则它不是真正的散列函数,因为它的可逆性很小。该散列函数没有边界。如果参数的单个字符受到限制,则0@JamesKPolk确切地缺少的是某种类型的边界函数——否则它就不是真正的散列,是非常可逆的