2010-04-24 16 views
13

Tengo un problema bastante extraño. Para una tabla Hash distribuida, necesito poder hacer algunas operaciones matemáticas simples en hashes MD5. Estos incluyen una suma (suma numérica representada por el hash) y una operación de módulo. Ahora me pregunto cuál es la mejor forma de implementar estas operaciones. Estoy usando hashlib para calcular los hash, pero como los hashes que obtengo son de cadena, ¿cómo puedo calcularlos?Operaciones en Python hashes

Respuesta

23

Usted puede utilizar el método hexdigest() para obtener dígitos hexadecimales, y luego convertirlos a un número:

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

Si ya tiene la salida de digest(), se puede convertir en dígitos hexadecimales:

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

Editar:

Para el segundo caso, que es real es más fácil de convertir usando .encode('hex') o binascii.hexlify:

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