【问题标题】:Implement hashing function with collision实现带有冲突的散列函数
【发布时间】:2012-08-25 04:48:47
【问题描述】:

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

谁能帮助我开始使用算法或示例实现,或者只是为我指明正确的方向?

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

【问题讨论】:

  • 散列什么?字符串、整数、浮点数、元组、小数,还是完全不同的东西?

标签: python hash


【解决方案1】:

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

sum(ord(c) for c in text)

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

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

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

【讨论】:

  • 为了轻松增加碰撞的机会,您可以计算这个总和 % 10(或其他数字)。 :)
  • 由于区分大小写,Jerry Kindall 不会与 Dilan Kyrjer 发生冲突 - ord('d') != ord('D')
  • 这就是为什么我说它是给最后一个的。不区分大小写的那个。
【解决方案2】:

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

有点像

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

所以任何以同一个字母开头的东西都会被散列在一起。如您所见,这是很多冲突。

另一种思路是根据字符串的长度进行hash。

hash[len(text)] = text

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

hash[len(text) % 5] = text

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 2020-03-10
    • 2016-10-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多