Я хочу, чтобы реализация hashlib встроенного алгоритма hash 2.7 использовалась в Python 3 - PullRequest
0 голосов
/ 06 ноября 2019

Я использовал хеш-функцию для генерации некоторого значения ключа раздела в Python 2. Я зависел от встроенной хеш-функции. Я не знал, что реализация не гарантируется, что она будет одинаковой в разных версиях, и я должен был использовать библиотеку Python hashlib с указанным алгоритмом, таким как md5 или sha256. алгоритм для продолжения работы, мне интересно, есть ли Python-код, эквивалентный хэш-функции, или использование библиотеки hashlib для генерации результата.

Простое использование алгоритмов hashlib, похоже, не использует один и тот же ответ. Python 3 использует другой алгоритм sipHash и random seed для хеширования строк.

- обновление Я попытался запустить этот код в 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 реализация работали. Решение в ответе.

1 Ответ

0 голосов
/ 07 ноября 2019

Привет, я нашел решение, которое выглядит как работающее:

%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

Спасибо всем за то, что поделились вашими данными

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...