对于演示项目,我想创建一个具有很高碰撞概率的散列函数。简单的事情很好,因为项目的目标不是安全性 - 而是为了演示哈希冲突。
任何人都可以帮助我开始使用算法或示例实现,或者只是指出我正确的方向吗?
我在Python中这样做,但也许这不重要。
答案 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