提取MD5哈希的前8个字节
我正在尝试把一个字符串转换成一个哈希值,我已经用hashlib库实现了这一点,代码如下:
def get_md5_as_bytes(data):
m = hashlib.md5()
m.update(data)
return m.digest()
接下来,我需要从这个结果中提取前8个字节,然后用它做其他事情。
在之前的一个问题中,有人建议我使用Struct来把一个8字节的十六进制数转换成十进制。现在我再次查看这个方法,觉得它可能正好能解决我的问题。请问,能否使用Struct从一个字节字符串中提取前8个字节呢?
3 个回答
1
如果有人想要获取一个64位整数:
def hash_int64(input_string):
m = hashlib.md5()
m.update(input_string)
bytes_64 = m.digest()[:8]
return struct.unpack('>q', bytes_64)[0]
这个内容是基于 mu 無 的回答
1
如果你使用了 mu 無 的方法,配合 m.hexdigest()[:8]
,那么你可以把它转换成字节列表:
hex_str = get_md5_as_bytes('hello world')
print 'string:', hex_str
bytes = [ int(x, 16) for x in hex_str ]
print 'bytes:', bytes
结果是
string: 5eb63bbb
bytes: [5, 14, 11, 6, 3, 11, 11, 11]
编辑:
使用
import struct
print 'unpack:', struct.unpack('8B', hex_str)
你可以得到 hex_str
中字符的 ASCII 码 - 不过我觉得这可能不是你想要的结果。
string: 5eb63bbb
unpack: (53, 101, 98, 54, 51, 98, 98, 98)
但是也许如果你用 m.digest()
,你就能得到你想要的结果。