通过碰撞实现散列函数

时间:2012-08-24 16:31:29

标签: python hash

对于演示项目,我想创建一个具有很高碰撞概率的散列函数。简单的事情很好,因为项目的目标不是安全性 - 而是为了演示哈希冲突。

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

我在Python中这样做,但也许这不重要。

2 个答案:

答案 0 :(得分:4)

您可以使用字符串中的字符总和。这是我在高中时第一次学习BASIC时所学习的第一个哈希函数,我立即遇到了碰撞问题并且必须弄清楚如何处理它。

sum(ord(c) for c in text)

通过交换字符串甚至单词可以轻松实现转置。为了更有趣,您还可以使其不区分大小写:

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

我甚至会给你最后一个样本碰撞:Jerry Kindall - > Dillan Kyrjer: - )

答案 1 :(得分:0)

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

这样的东西
hash[ord(text[0]) - ord('a')] = text

因此,任何以相同字母开头的内容都将被混合在一起。如你所见,那是很多碰撞。

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

hash[len(text)] = text

您可以使用hayden在上面的评论中建议的内容,并通过将模数设置为模数来引起进一步的冲突。例如

hash[len(text) % 5] = text