2010-04-24 81 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 

编辑

对于第二种情况,它的实际ly更容易转换使用.encode('hex')binascii.hexlify

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