【问题标题】:I want hashlib implementation of built in hash 2.7 algorithm to be used in python 3我希望在 python 3 中使用内置哈希 2.7 算法的 hashlib 实现
【发布时间】: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 代码,并产生与默认内置哈希函数相同的输出

标签: python hash


【解决方案1】:

您好,我找到了一个看起来可行的解决方案:

%python
import ctypes
def c_mul(a, b):
    return ctypes.c_int64((a * b) & 0xffffffffffffffff).value
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

感谢大家分享您的意见

【讨论】:

    猜你喜欢
    • 2016-03-05
    • 2012-06-03
    • 2021-11-19
    • 2014-10-18
    • 2011-06-08
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多