0

这是我老师写的代码(python)。(我使用蛮力发现的素数)。我还有一些带有匹配哈希的密码的测试数据(现在我已经找到了函数中使用的两个素数,这并不重要)。

任何人都可以帮助我找到“扭转”这种情况的方法,或者至少给我一个小费吗?

def prime_number_hash(s , 17299, 209569):
    """
    Will hash the string s using the two prime numbers p and n.
    """
    h = 0
    for k,l in enumerate(s):
        v = ord(l)
        # k is the index of the letter 
        h += v * pow(p,k)
    return h % n
4

2 回答 2

4

简单的答案是您无法根据哈希值重构输入字符串。该函数具有209569不同的输出值,并且有更多可能的输入字符串。参见鸽洞原理

如果任务是找到具有给定哈希字符串,那是一个不同的问题......

于 2013-04-01T08:23:02.123 回答
0

我成功了。我只做了 6 个循环并尝试了每个字母组合。当我发现它时,它是一个例外。5秒内被发现。

于 2013-04-01T16:30:10.960 回答