Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 利用冲突实现哈希函数_Python_Hash - Fatal编程技术网

Python 利用冲突实现哈希函数

Python 利用冲突实现哈希函数,python,hash,Python,Hash,对于一个演示项目,我想创建一个冲突概率非常高的哈希函数。简单一点就可以了,因为项目的目标不是安全性,而是演示哈希冲突 谁能帮我开始一个算法,或者一个示例实现,或者只是给我指出正确的方向 我是用Python来做这件事的,不过也许这不重要。可以使用字符串中字符的总和。这是我在高中第一次学习BASIC时教的第一个散列函数,我马上遇到了碰撞问题,不得不想办法解决它 sum(ord(c) for c in text) 通过交换字符串甚至单词,很容易实现换位。为了获得更多乐趣,您还可以使其不区分大小写:

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

谁能帮我开始一个算法,或者一个示例实现,或者只是给我指出正确的方向


我是用Python来做这件事的,不过也许这不重要。

可以使用字符串中字符的总和。这是我在高中第一次学习BASIC时教的第一个散列函数,我马上遇到了碰撞问题,不得不想办法解决它

sum(ord(c) for c in text)
通过交换字符串甚至单词,很容易实现换位。为了获得更多乐趣,您还可以使其不区分大小写:

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

我甚至会给你最后一个例子:Jerry Kindall->Dillan Kyrjer:-)

你可以使用字符串中字符的总和。这是我在高中第一次学习BASIC时教的第一个散列函数,我马上遇到了碰撞问题,不得不想办法解决它

sum(ord(c) for c in text)
通过交换字符串甚至单词,很容易实现换位。为了获得更多乐趣,您还可以使其不区分大小写:

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

我甚至会给你最后一个例子:Jerry Kindall->Dillan Kyrjer:-)

我想到的一个算法是使用字符串的第一个字母进行哈希运算

hash[len(text)] = text
差不多

hash[ord(text[0]) - ord('a')] = text
因此,任何以相同字母开头的内容都将散列在一起。正如你所看到的,这是大量的碰撞

另一种方法是根据字符串的长度进行散列

hash[len(text)] = text
您可以使用海登在上面的评论中的建议,并通过将长度模乘以某个数字来引起进一步的冲突。例如

hash[len(text) % 5] = text

想到的一个算法是使用字符串的第一个字母进行哈希运算

hash[len(text)] = text
差不多

hash[ord(text[0]) - ord('a')] = text
因此,任何以相同字母开头的内容都将散列在一起。正如你所看到的,这是大量的碰撞

另一种方法是根据字符串的长度进行散列

hash[len(text)] = text
您可以使用海登在上面的评论中的建议,并通过将长度模乘以某个数字来引起进一步的冲突。例如

hash[len(text) % 5] = text

散列什么?字符串,整数,浮点数,元组,小数,其他的东西?散列什么?字符串、整数、浮点数、元组、小数等完全不同的数字?要轻松增加冲突的可能性,可以计算此总和%10(或其他数字):)由于区分大小写,Jerry Kindall与Dillan Kyrjer没有冲突-ord('d')!=这就是为什么我说这是最后一次。不区分大小写的。若要轻松增加碰撞的可能性,可以计算此总和%10(或其他数字)。:)由于区分大小写,Jerry Kindall与Dillan Kyrjer没有冲突-ord('d')!=这就是为什么我说这是最后一次。不区分大小写的那个。