提取MD5哈希的前8个字节

2024-05-19 22:25:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究获取一个字符串并将其转换为散列,我已经能够使用hashlib库和以下函数来实现这一点

def get_md5_as_bytes(data):
    m = hashlib.md5()
    m.update(data)
    return m.digest()

我需要做的是得到这个字符串的前8个字节,然后用它来做其他事情。在

在前面的一个问题中,我被指出使用Struct作为一种将8字节的十六进制数转换为十进制数的方法,再看一次,我觉得它又是我问题的解决方案。是否可以使用结构从字节字符串输入中提取前8个字节?在


Tags: 函数字符串datagetreturn字节bytesdef
3条回答

如果将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

结果

^{pr2}$

编辑:

使用

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()一起使用,你会得到你想要的。在

尝试使用以下方法-基本上是在结尾使用[:8]拼接返回字符串

def get_md5_as_bytes(data):
    m = hashlib.md5()
    m.update(data)
    return m.hexdigest()[:8]

请注意,我使用了hexdigest,而不是{a2}。如果需要,可以还原相同的内容。在

如果有人想得到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 無的答案

相关问题 更多 >