如何为Python 2.7和3.4生成相同的哈希值

问题描述 投票:0回答:3

我已经为两个不同项目中的两个不同函数生成了哈希。一个项目使用python 2.7环境,其他项目使用python 3.4。我需要匹配这两个哈希。

    x=("asd","def")
    hash(x)

不匹配。任何想法?预先感谢。

python python-3.x python-2.7 hash
3个回答
3
投票

好吧,运气不好。

__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

有效。


1
投票

在 Python 3 和 2 中使用 py27hash 获得相同的哈希结果:

$ python2.7
>>> print(hash("test1234"))
1724133767363937712

$ python3
>>> print(hash("test1234"))
-2119032519227362575
>>> from py27hash.hash import hash27
>>> print(hash27("test1234"))
1724133767363937712

0
投票

您可以使用

hashlib
中的哈希函数确定性地生成哈希值:

import hashlib

hash_obj = hashlib.sha256(b"hello")
hex_hash = hash_obj.hexdigest()
print(hex_hash)
# Always prints: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

模块中有各种可用的哈希函数,因此请参阅hashlib文档

了解更多信息
© www.soinside.com 2019 - 2024. All rights reserved.