Pregunta

Estoy tratando de entender el código hashlib simple en Python que se ha dado a mí el otro día en 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

pensé que print m me mostraría el resumen MD5 de la frase: "Nadie inspecciona la repetición spammish aquí", sino como un resultado que obtuve esta línea en mi máquina local:

<md5 HASH object @ 01806220>

Extraño, cuando refrescado la página, tengo otra línea:

<md5 HASH object @ 018062E0>

y cada vez que restauro, consigo otro valor:

  

md5 objeto HASH @ 017F8AE0

     

md5 objeto HASH @ 01806220

     

md5 objeto HASH @ 01806360

     

md5 objeto HASH @ 01806400

     

md5 objeto HASH @ 01806220

¿Por qué es así? Supongo, lo que tengo en cada línea que fluye "@" no es realmente un digerir. ¿Entonces que es eso? ¿Y cómo puedo mostrar MD5 aquí en este código?

Mi versión es Python Python 2.5 y el marco Actualmente estoy usando es webapp (He descargado junto con el SDK de "Google App Engine")

¿Fue útil?

Solución

El objeto hashlib.hash no implementa su propio __str__, por lo que se utiliza la operación predeterminada a cadena, que imprime el nombre de la clase seguido de su id (dirección).

(Uso .hexdigest() para obtener la cadena MD5 hexagonal .)

Otros consejos

print m.hexdigest()

upadate: hexdigest() da otra representación de digest(). Cada carácter de compendio se transforma en su representación hexadecimal. Puede transformarla con la siguiente función:

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

También puede utilizar el generador de expresion

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

o

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

Por cierto:. Puede utilizar dir(some_object) para obtener una lista de sus elementos, y help(some_object) (en el intérprete interactivo) para obtener más información al respecto

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top