我已经为两个不同项目中的两个不同函数生成了哈希。一个项目使用python 2.7环境,其他项目使用python 3.4。我需要匹配这两个哈希。
x=("asd","def")
hash(x)
不匹配。任何想法?预先感谢。
__hash__
的内部细节被视为实现细节。另外,在Python 3.3之后,字符串的哈希函数默认是随机的。 32 位版本和 64 位版本的计算有所不同(该值被截断为 Py_ssize_t
)。
但是,例如,如果您的 Python 3.5 是 64 位,而 Python 2.7 是 32 位;您可以尝试将 Python 3 值与 0xFFFFFFFF 进行 AND 运算以获得 2.7 值,例如 if
>>> hash((1, 2, 3)) & 0xFFFFFFFF
有效。
在 Python 3 和 2 中使用 py27hash 获得相同的哈希结果:
$ python2.7
>>> print(hash("test1234"))
1724133767363937712
$ python3
>>> print(hash("test1234"))
-2119032519227362575
>>> from py27hash.hash import hash27
>>> print(hash27("test1234"))
1724133767363937712
您可以使用
hashlib
中的哈希函数确定性地生成哈希值:
import hashlib
hash_obj = hashlib.sha256(b"hello")
hex_hash = hash_obj.hexdigest()
print(hex_hash)
# Always prints: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
模块中有各种可用的哈希函数,因此请参阅hashlib文档。
了解更多信息