2010-04-24 5 views
13

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

ответ

23

Вы можете использовать метод 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 

Edit:

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

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