Операции над хэшами Python - PullRequest
       30

Операции над хэшами Python

15 голосов
/ 24 апреля 2010

У меня довольно странная проблема. Для распределенной хэш-таблицы мне нужно иметь возможность выполнять некоторые простые математические операции с хэш-кодами MD5. К ним относятся сумма (числовая сумма, представленная хешем) и операция по модулю. Теперь мне интересно, как лучше всего реализовать эти операции. Я использую hashlib для вычисления хэшей, но так как хэши, которые я получаю, являются строковыми, как мне рассчитать их?

1 Ответ

26 голосов
/ 24 апреля 2010

Вы можете использовать метод hexdigest(), чтобы получить шестнадцатеричные цифры, а затем преобразовать их в число:

>>> h = hashlib.md5('data')
>>> int(h.hexdigest(), 16)
188041611063492600696317361555123480284L

Если у вас уже есть вывод digest(), вы можете преобразовать его в шестнадцатеричные цифры:

>>> hexDig = ''.join('%02x' % ord(x) for x in h.digest())
>>> int(hexDig, 16)
188041611063492600696317361555123480284L

Редактировать

Во втором случае конвертировать проще, используя .encode('hex') или binascii.hexlify:

>>> int(h.digest().encode('hex'), 16)
188041611063492600696317361555123480284L
>>> int(binascii.hexlify(h.digest()), 16)
188041611063492600696317361555123480284L
...