【发布时间】:2019-11-06 19:53:20
【问题描述】:
我使用哈希函数在 Python 2 中生成一些分区键值。我依赖于内置的哈希函数。我不知道不同版本的实现不能保证相同,我应该使用具有指定算法的 Python hashlib 库,如 md5 或 sha256。
为了推进到 python 3,我需要算法继续工作,我想知道是否有 python 代码等效于 hash 函数或利用 hashlib 库来生成结果。
简单使用 hashlib 算法似乎没有使用相同的答案 python 3 使用不同的算法 sipHash 和随机种子进行字符串散列。
--更新 我试图在 python 2 中运行这段代码,但它没有工作,因为它产生了不同的结果。
def c_mul(a, b):
return eval(hex((long(a) * b) & 0xFFFFFFFFL)[:-1])
def hash2(self):
if not self:
return 0 # empty
value = ord(self[0]) << 7
for char in self:
value = c_mul(1000003, value) ^ ord(char)
value = value ^ len(self)
if value == -1:
value = -2
return value
我需要代码才能在 python 3 中运行
--更新 通过考虑 64 位和 python3 特定实现来修改上述算法。答案就在答案中。
【问题讨论】:
-
内置的
hash函数并不适用于与hashlib中相同的用例;借此机会更正您的错误。 -
这里有什么问题?
-
这里是 py2.7 中的 hash() 实现:stackoverflow.com/questions/6008026/…。但是你应该切换到 hashlib。顺便说一句,不仅不能保证跨版本产生相同的结果,而且跨运行!
-
@chepner 数据在运行中似乎是一致的,我们在同一台机器上运行它,在历史数据中使用 hashlib 对我来说并不划算。
-
@AriCooper-Davis 这里的问题我想要在 python 3 中运行的 python 代码,并产生与默认内置哈希函数相同的输出