【发布时间】:2012-08-25 04:48:47
【问题描述】:
对于一个演示项目,我想创建一个碰撞概率非常高的哈希函数。简单的事情就可以了,因为该项目的目的不是安全性 - 而是演示哈希冲突。
谁能帮助我开始使用算法或示例实现,或者只是为我指明正确的方向?
我在 Python 中执行此操作,尽管这可能无关紧要。
【问题讨论】:
-
散列什么?字符串、整数、浮点数、元组、小数,还是完全不同的东西?
对于一个演示项目,我想创建一个碰撞概率非常高的哈希函数。简单的事情就可以了,因为该项目的目的不是安全性 - 而是演示哈希冲突。
谁能帮助我开始使用算法或示例实现,或者只是为我指明正确的方向?
我在 Python 中执行此操作,尽管这可能无关紧要。
【问题讨论】:
您可以使用字符串中字符的总和。这是我高中第一次学习 BASIC 时被教的第一个哈希函数,我马上就遇到了碰撞问题,不得不想办法处理它。
sum(ord(c) for c in text)
换位很容易通过交换字符串甚至单词来实现。为了更有趣,您还可以使其不区分大小写:
sum(ord(c) for c in text.lower())
我什至会给你最后一个碰撞示例:Jerry Kindall -> Dilan Kyrjer :-)
【讨论】:
想到的一种算法是使用字符串的第一个字母进行散列。
有点像
hash[ord(text[0]) - ord('a')] = text
所以任何以同一个字母开头的东西都会被散列在一起。如您所见,这是很多冲突。
另一种思路是根据字符串的长度进行hash。
hash[len(text)] = text
您可以使用上面评论中 hayden 建议的内容,并通过将长度取模某个数字来引起进一步的冲突。例如。
hash[len(text) % 5] = text
【讨论】: