提取MD5哈希的前8个字节

时间:2014-07-26 14:52:43

标签: python python-2.7

我正在考虑使用字符串并将其转换为Hash,我已经能够使用带有以下函数的hashlib库来执行此操作

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

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

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

3 个答案:

答案 0 :(得分:3)

尝试使用以下内容 - 基本上在最后使用[:8]拼接返回字符串

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

请注意,我使用的是hexdigest而不是digest。如果需要,你可以恢复它。

答案 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 無的答案