Frage

Ich versuche, diese einfache hashlib Code in Python zu verstehen, die den anderen Tag auf Stackoverflow, die mir gegeben wurde:

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

dachte ich, dass print m mir den MD5-Digest der Phrase zeigen würde: „Niemand die spammish Wiederholung kontrolliert hier“, sondern als Ergebnis bekam ich diese Linie auf meinem lokalen Host:

<md5 HASH object @ 01806220>

Seltsam, wenn ich die Seite aktualisiert, bekam ich eine weitere Zeile:

<md5 HASH object @ 018062E0>

und jedes Mal, wenn ich es zu aktualisieren, ich einen anderen Wert erhalten:

  

md5 Hashobjekt @ 017F8AE0

     

md5 Hashobjekt @ 01806220

     

md5 Hashobjekt @ 01806360

     

md5 Hashobjekt @ 01806400

     

md5 Hashobjekt @ 01806220

Warum ist es so? Ich denke, was ich in jeder Zeile haben fließt „@“ ist nicht wirklich ein verdauen. Was ist es dann? Und wie kann ich MD5 hier in diesem Digest-Code angezeigt werden?

Meine Python-Version ist Python 2.5 und der Rahmen, den ich zur Zeit benutzen, ist Webapp (Ich habe es zusammen mit SDK von "Google App Engine" heruntergeladen)

War es hilfreich?

Lösung

Das hashlib.hash Objekt hat keine eigene __str__ implementieren, so dass die Standard-to-String-Operation verwendet wird, das druckt die Klassennamen gefolgt von seiner id (Adresse).

(Benutzen Sie .hexdigest() das Hex-MD5 String zu erhalten ).

Andere Tipps

print m.hexdigest()

UPADATE: hexdigest() gibt eine andere Darstellung von digest(). Jeder Charakter in digest in seine hexadezimale Darstellung umgewandelt. Sie können es mit der folgenden Funktion transformieren:

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

Sie können auch den Generator verwenden expresion

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

oder

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

BTW:. Sie können dir(some_object) verwenden, um eine Liste der Elemente zu bekommen, und help(some_object) (im interaktiven Interpreter), um weitere Informationen darüber zu bekommen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top