Opérations sur Python hash
Question
J'ai un problème assez étrange. Pour une table de hachage distribuée Tableau I besoin d'être en mesure de faire des opérations mathématiques simples sur hash MD5. Ceux-ci comprennent une somme (somme numérique représentée par le hachage) et une opération modulo. Maintenant, je me demande quelle est la meilleure façon de mettre en œuvre ces opérations est. J'utilise hashlib pour les calculer, mais étant donné que les hash que je reçois sont alors chaîne, comment puis-je calculer avec eux?
La solution
Vous pouvez utiliser la méthode hexdigest()
pour obtenir des chiffres hexadécimaux, puis les convertir en nombre:
>>> h = hashlib.md5('data')
>>> int(h.hexdigest(), 16)
188041611063492600696317361555123480284L
Si vous avez déjà la sortie de digest()
, vous pouvez le convertir en chiffres hexadécimaux:
>>> hexDig = ''.join('%02x' % ord(x) for x in h.digest())
>>> int(hexDig, 16)
188041611063492600696317361555123480284L
Modifier :
Pour le second cas, il est effectivement plus facile à convertir à l'aide .encode('hex')
ou binascii.hexlify
:
>>> int(h.digest().encode('hex'), 16)
188041611063492600696317361555123480284L
>>> int(binascii.hexlify(h.digest()), 16)
188041611063492600696317361555123480284L