1

对于一个演示项目,我想创建一个碰撞概率非常高的散列函数。简单的事情就可以了,因为该项目的目的不是安全 - 而是演示哈希冲突。

任何人都可以帮助我开始使用算法或示例实现,或者只是指出我正确的方向吗?

我在 Python 中执行此操作,尽管这可能无关紧要。

4

2 回答 2

4

您可以使用字符串中字符的总和。这是我在高中第一次学习 BASIC 时教给我的第一个哈希函数,我马上就遇到了碰撞问题,不得不弄清楚如何处理它。

sum(ord(c) for c in text)

换位很容易通过交换字符串甚至单词来实现。为了更有趣,您还可以使其不区分大小写:

sum(ord(c) for c in text.lower())

我什至会给你最后一个碰撞示例:Jerry Kindall -> Dilan Kyrjer :-)

于 2012-08-24T16:42:49.160 回答
0

想到的一种算法是使用字符串的第一个字母进行散列。

就像是

hash[ord(text[0]) - ord('a')] = text

因此,以相同字母开头的任何内容都将被散列在一起。如您所见,这是很多冲突。

另一个想法是根据字符串的长度进行散列。

hash[len(text)] = text

您可以使用 hayden 在上面的评论中建议的内容,并通过将长度取模某个数字来引起进一步的冲突。例如。

hash[len(text) % 5] = text
于 2012-08-24T20:48:47.587 回答