我正在尝试理解Python中的这个简单的hashlib代码,它是前几天在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我以为print m会向我展示短语的MD5摘要:“这里没有人检查垃圾邮件的重复”,但结果我在本地主机上看到了这一行:
<md5 HASH object @ 01806220>奇怪的是,当我刷新页面时,我得到了另一行:
<md5 HASH object @ 018062E0>每次我刷新它的时候,我都会得到另一个值:
md5散列对象@ 017F8AE0
md5散列对象@ 01806220
md5散列对象@ 01806360
md5散列对象@ 01806400
md5散列对象@ 01806220
为什么会这样呢?我想,我在每一行中流动的"@“并不是一个真正的摘要。那这是什么?如何在此代码中显示MD5摘要?
我的python版本是Python2.5,我目前使用的框架是webapp (我已经从"Google“下载了它和SDK )。
发布于 2010-04-08 06:07:29
hashlib.hash对象不实现它自己的__str__,所以使用默认的字符串操作,它打印类名和它的id (地址)。
(使用.hexdigest()获取十六进制MD5字符串。)
发布于 2010-04-08 06:07:48
print m.hexdigest()UPADATE:hexdigest()给出了digest()的另一个表示形式。摘要中的每个字符都被转换成它的十六进制表示。您可以使用以下函数对其进行转换:
def digest_to_hex(chars):
res = ''
for c in chars:
res = res + '%02x' % ord(c)
return res您也可以使用生成器表示。
''.join('%02x' % ord(x) for x in m.digest())或
m.digest().encode('hex')顺便说一句:您可以使用dir(some_object)获取其元素的列表,使用help(some_object) (在交互式解释器中)获取有关它的更多信息。
https://stackoverflow.com/questions/2597863
复制相似问题