Вопрос

Я пытаюсь понять этот простой код Hashlib в Python, который был передан мне на днях на стойке:

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

я думал что print m Покажет мне дайджест MD5 фразы: «Никто не проверяет повторение« Спамис »здесь», но в результате я получил эту линию на моем местном хосте:

<md5 HASH object @ 01806220>

Странно, когда я освежал страницу, я получил еще одну строку:

<md5 HASH object @ 018062E0>

И каждый раз, когда я его обновляю, я получаю еще одну ценность:

MD5 Hash Object @ 017f8ae0

MD5 Hash Object @ 01806220

MD5 Hash Object @ 01806360

MD5 Hash Object @ 01806400

MD5 Hash Object @ 01806220

Почему это так? Я думаю, что у меня в каждой линии течет «@», не совсем дайджест. Тогда что это? И как я могу отобразить дайджест MD5 здесь в этом коде?

Моя версия Python - python 2.5, а рамки, которые я использую, это WebApp (я скачал его вместе с SDK из "Google App Engine")

Это было полезно?

Решение

То hashlib.hash Объект не реализует свои собственные __str__, поэтому используется операция по умолчанию для строки, которая печатает имя класса, за которым следует его id (адрес).

(Использовать .hexdigest() Чтобы получить строку Hex MD5.)

Другие советы

print m.hexdigest()

Upadate: hexdigest() дает другое представление о digest(). Отказ Каждый персонаж в дайджесте преобразуется в его шестигранное представление. Вы можете преобразовать его со следующей функцией:

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

Вы также можете использовать Expresion Generator

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

или

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

Кстати: вы можете использовать dir(some_object) получить список его элементов и help(some_object) (в интерактивном переводчике) получить больше информации об этом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top