纯Python中的字符串有哪些潜在的哈希算法?

时间:2015-05-20 14:02:19

标签: python hash

标准hash('hello')函数可能会在不同的机器,不同版本的Python上生成不同的哈希值,甚至可能在同一个Python版本/机器上运行相同程序的不同哈希值。

什么是正常的纯Python (或内置)替代品,具有较低的碰撞机率?我之前使用的用例是检查数据库中字符串的唯一性(注意:它不必100%万无一失,只是极不可能与另一个字符串冲突)。

2 个答案:

答案 0 :(得分:1)

Murmurhash对于非cyrptographic用法是一个不错的选择(与使用慢速加密哈希的hashlib相反),原因有多种:

  • 使用非常广泛

  • 不仅可以在Python版本和机器上移植,而且可以跨不同语言移植

Here是它的Python绑定。 Here是关于算法本身的问题。

如果由于某些技术原因,可能需要使用纯Python自己的实现,那么有一些可行的选项:

  • murmurhash的源代码在上面的第一个链接中,但是,在纯Python模式下,应该可以用更简单的东西替换

  • 直接候选人是KnuthJenkins

答案 1 :(得分:1)

尝试使用python hashlib。它具有MD5,SHA1,SHA224,SHA256,SHA384和SHA512的实现,它们可以为您提供一个具有较低冲突机会的良好哈希。

示例输入:

import hashlib
hashed_string = hashlib.sha512("hello").hexdigest()
print hashed_string

输出:

9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043