在Python 3中计算整数的MD5哈希值?

4
我需要使用Python 3计算一个整数的哈希值。除了以下方法,是否有更简洁高效的解决方案?
>>> import hashlib
>>> N = 123
>>> hashlib.md5(str(N).encode("ascii")).hexdigest()
'202cb962ac59075b964b07152d234b70'

将字符串转换为Unicode编码,再解码成字节数组似乎有些奇怪。

2个回答

3

像MD5这样的加密哈希函数只能应用于字节。有更有效的方法将数字编码为字节,但仍需要遵循合同。

>>> hashlib.md5(int(-123).to_bytes(8, 'big', signed=True)).hexdigest()
'fc1063e1bcb35f0d52cdceae4626c39b'

太好了,谢谢Ignacio。我不知道你可以在int上调用方法。你知道怎么在Python 2中做到这一点吗? - MiniQuark
对于 Python 2.x,您需要使用“struct”将其打包成字节串。 - Ignacio Vazquez-Abrams
哎呀,这又是一个更喜欢Python 3的理由。再次感谢。 - MiniQuark

1

Ignacio的回答非常完美,但是如果您需要的代码可以在python 2和python 3上运行,并且如果您已经安装了NumPy,则以下方法也很好用:

>>> import numpy as np
>>> import hashlib.md5
>>> N = 123
>>> hashlib.md5(np.int64(N)).hexdigest()
'f18b8dbefe02a0efce281deb55a209cd'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接