Question

Je suis en train de comprendre ce simple code hashlib en Python qui m'a été donné l'autre jour sur Stackoverflow:

import hashlib
m = hashlib.md5()
m.update("Nobody inspects")
m.update(" the spammish repetition here")
m.digest()
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
m.digest_size
16
m.block_size
64
print m

Je pensais que print m me montrer le MD5 de la phrase: « Personne n'inspecte la répétition spammish ici », mais par conséquent, je suis arrivé cette ligne sur mon hôte local:

<md5 HASH object @ 01806220>

Etrange, quand je rafraîchi la page, je suis une autre ligne:

<md5 HASH object @ 018062E0>

et chaque fois que je le rafraîchir, je reçois une autre valeur:

  

md5 objet HASH @ 017F8AE0

     

md5 objet HASH @ 01806220

     

md5 objet HASH @ 01806360

     

md5 objet HASH @ 01806400

     

md5 objet HASH @ 01806220

Pourquoi est-il? Je suppose que ce que j'ai dans chaque ligne qui coule « @ » est pas vraiment un condensé. Alors qu'est-ce que c'est? Et comment puis-je afficher ici MD5 dans ce code?

Ma version python est Python 2.5 et le cadre que je suis actuellement en utilisant est webapp (je l'ai téléchargé avec le SDK de "Google App Engine")

Était-ce utile?

La solution

L'objet hashlib.hash ne met pas en œuvre son propre __str__, l'opération par défaut à chaîne est utilisée, qui imprime le nom de la classe suivie par son id (adresse).

(Utilisez .hexdigest() pour obtenir la chaîne MD5 hexagonale .)

Autres conseils

print m.hexdigest()

UPADATE: hexdigest() donne une autre représentation de digest(). Chaque caractère condensé est transformé en sa représentation hexagonale. Vous pouvez le transformer avec la fonction suivante:

def digest_to_hex(chars):  
  res = ''  
  for c in chars:  
    res = res + '%02x' % ord(c)  
  return res

Vous pouvez également utiliser le générateur expresion

''.join('%02x' % ord(x) for x in m.digest())

ou

m.digest().encode('hex')

BTW:. Vous pouvez utiliser dir(some_object) pour obtenir une liste de ses éléments, et help(some_object) (dans l'interpréteur interactif) pour obtenir plus d'informations à ce sujet

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top