我正在考虑使用字符串并将其转换为Hash,我已经能够使用带有以下函数的hashlib库来执行此操作
def get_md5_as_bytes(data):
m = hashlib.md5()
m.update(data)
return m.digest()
我需要做的是得到这个字符串的前8个字节然后用它来做其他事情。
在之前的一个问题中,我指出使用Struct作为将8字节十六进制数转换为十进制并再次查看它的方法我觉得它再次是我的问题的解决方案。是否可以使用结构从字节串输入中提取前8个字节?
答案 0 :(得分:3)
尝试使用以下内容 - 基本上在最后使用[:8]
拼接返回字符串
def get_md5_as_bytes(data):
m = hashlib.md5()
m.update(data)
return m.hexdigest()[:8]
答案 1 :(得分:1)
如果对m.hexdigest()[:8]
使用mu 無解决方案,则可以将其转换为字节列表:
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()
一起使用它可以得到你期望的结果。
答案 2 :(得分:0)
如果有人想获得一个int64:
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 無的答案