为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用Hashlib对一个数字进行MD5散列?

如何使用Hashlib对一个数字进行MD5散列?

德玛西亚99 2022-06-14 15:16:05
似乎每个人都在这样做:import hashlib # initializing string str = "GeeksforGeeks"# encoding GeeksforGeeks using encode() # then sending to md5() result = hashlib.md5(str.encode()) 但是,我想对普通数字进行哈希处理。就像是result = hashlib.md5(0) #orvar = 5result = hashlib.md5(var)不工作,我已经尝试了很多其他的变化。什么是正确的语法?
查看完整描述

2 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

散列对字节序列进行操作。


Python 中的整数只是一个逻辑值。它没有明确的大小或字节表示。如果要对数字进行哈希处理,则需要在对其进行哈希处理之前确定将数字放入的形式。


最简单的选择是散列数字的字符串表示形式。通过调用str和散列该结果来做到这一点。例如


var = 5

hash_input = str(var)

result = hashlib.md5(hash_input)

另一种选择是选择固定大小,并对数字的二进制表示进行散列:


var = 5

hash_input = struct.pack('<I', var)  # Little-endian 32-bit unsigned

result = hashlib.md5(hash_input)

执行此操作的正确方法完全取决于您到底要完成什么,而您没有告诉我们。


查看完整回答
反对 回复 2022-06-14
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

至少可以说,散列普通数字是模棱两可的。

在输入摘要算法之前,该数字应转换为字节。您将遇到的第一个问题是数字占用的字节大小,可以是 4 字节、8 字节或其他。然后是字节顺序,即内存中字节的顺序。所有这些都会导致看似相同的数字产生不同的摘要。(为简单起见,我假设数字是 int)


>>> hashlib.md5(b'4').hexdigest()

'a87ff679a2f3e71d9181a67b7542122c'

>>> i = 4

>>> hashlib.md5(i.to_bytes(2, 'big')).hexdigest()

'c244b9cdf7853b5693a295e384c07367'

>>> hashlib.md5(i.to_bytes(4, 'big')).hexdigest()

'ea4959eb64a1f09be580d950964f3843'

>>> hashlib.md5(i.to_bytes(8, 'big')).hexdigest()

'59cff542fae7e0c4267e45740a12c9a0'

因此,您的解决方案是将其转换int为str并对其进行编码,以便从中获取摘要。


# either this

>>> hashlib.md5(b'4').hexdigest()

# or

>>> hashlib.md5(str(4).encode()).hexdigest()


查看完整回答
反对 回复 2022-06-14
  • 2 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号