当前位置:  开发笔记 > 编程语言 > 正文

在Python 3中哈希一个int

如何解决《在Python3中哈希一个int》经验,为你挑选了1个好方法。

我想向学生们展示MD5与这里给出的两个整数"消息"相冲突.这是我对Python 2.7的原始演示:

from hashlib import md5

m1 = "d131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f8955ad340609f4b30283e488832571415a085125e8f7cdc99fd91dbdf280373c5bd8823e3156348f5bae6dacd436c919c6dd53e2b487da03fd02396306d248cda0e99f33420f577ee8ce54b67080a80d1ec69821bcb6a8839396f9652b6ff72a70"
m2 = "d131dd02c5e6eec4693d9a0698aff95c2fcab50712467eab4004583eb8fb7f8955ad340609f4b30283e4888325f1415a085125e8f7cdc99fd91dbd7280373c5bd8823e3156348f5bae6dacd436c919c6dd53e23487da03fd02396306d248cda0e99f33420f577ee8ce54b67080280d1ec69821bcb6a8839396f965ab6ff72a70"
# differences                               ^                                                   ^                           ^                                               ^                                                   ^                           ^

print md5(m1.decode("hex")).hexdigest()
print md5(m2.decode("hex")).hexdigest()

正如所料,它打印两次79054025255fb1a26e4bc422aef54eb4.现在,当我尝试将最后两行转换为Python 3.5时:

print(md5(int(m1, 16)).hexdigest())
print(md5(int(m2, 16)).hexdigest())

我得到的只是一条TypeError: object supporting the buffer API required信息.该方法decode在Python 3中不再有效,但我不确定int(m, base)如上所述替换它是个好主意.可能是问题在那里,而不是哈希函数API?



1> Martijn Piet..:

在Python 2中,将字符串解码为十六进制为您提供字节串,而不是整数.不要试图将十六进制字符串解释为整数.

使用该binascii.unhexlify()函数将十六进制字符串转换为字节字符串:

from binascii import unhexlify

print(md5(unhexlify(m1)).hexdigest())

请注意,相同的代码也可以在Python 2中正常工作.

如果您仍想使用解码,请使用以下codecs.decode()功能:

import codecs

print(md5(codecs.decode(m1, 'hex')).hexdigest())

同样,相同的代码也适用于Python 2.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有