2010-04-24 11 views
13

Ich habe ein ziemlich seltsames Problem. Für eine verteilte Hash-Tabelle muss ich in der Lage sein, einige einfache mathematische Operationen auf MD5-Hashes durchzuführen. Diese enthalten eine Summe (numerische Summe, dargestellt durch den Hash) und eine Modulo-Operation. Jetzt frage ich mich, was der beste Weg ist, diese Operationen zu implementieren. Ich benutze hashlib um die Hashes zu berechnen, aber da die Hashes ich bekomme sind dann String, wie berechne ich mit ihnen?Operationen auf Python-Hashes

Antwort

23

können Sie die hexdigest() Methode verwenden, um hexadezimale Ziffern zu erhalten, und sie dann in eine Zahl umwandeln:

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

Wenn Sie bereits die Ausgabe von digest() haben, können Sie es in hexadezimale Ziffern konvertieren:

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

bearbeiten:

Für den zweiten Fall ist es tatsächlich ly leichter zu konvertieren mit .encode('hex') oder binascii.hexlify:

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