Pergunta

Estou tentando entender esse código de hashlib simples em Python que me foi dado outro dia no 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

Eu pensei que print m Mostrava -me a digestão do MD5 da frase: "Ninguém inspeciona a repetição de spam aqui", mas, como resultado, recebi essa linha no meu anfitrião local:

<md5 HASH object @ 01806220>

Estranho, quando refrescei a página, recebi outra linha:

<md5 HASH object @ 018062E0>

E toda vez que quando eu refresco, recebo outro valor:

objeto de hash md5 @ 017f8ae0

objeto de hash md5 @ 01806220

objeto de hash md5 @ 01806360

objeto de hash md5 @ 01806400

objeto de hash md5 @ 01806220

Por que é tão? Eu acho que o que tenho em cada linha fluindo "@" não é realmente um resumo. Então, o que é? E como posso exibir o MD5 Digest aqui neste código?

Minha versão Python é Python 2.5 e a estrutura que estou usando atualmente é o WebApp (eu baixei junto com o SDK do "Google App Engine")

Foi útil?

Solução

o hashlib.hash objeto não implementa seu próprio __str__, então é usada a operação padrão para string, que imprime o nome da classe seguido por seu id (Morada).

(Usar .hexdigest() Para obter a string hexadecimal MD5.)

Outras dicas

print m.hexdigest()

Upadate: hexdigest() dá outra representação de digest(). Todo personagem em Digest é transformado em sua representação hexadecimal. Você pode transformá -lo com a seguinte função:

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

Você também pode usar a expresso do gerador

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

ou

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

Btw: você pode usar dir(some_object) para obter uma lista de seus elementos e help(some_object) (no intérprete interativo) para obter mais informações sobre isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top