2014-07-26 26 views
-3

我期待在采取了字符串,并将其转换为一个哈希,我已经能够用下面的函数提取前8个字节的MD5哈希

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

做到这一点使用的hashlib库我需要这样的结果做的就是前8个字节这个字符串,然后将它用于别的东西。

前一个问题,我指出,使用结构作为转换8字节十六进制数为十进制,看它的手段再次我觉得这又是解决我的问题。是否可以使用结构来从字节字符串输入中提取前8个字节?

+1

使用切片:'返回m.digest()[:8]'/'返回m.hexdigest()[:16]' – falsetru

回答

3

尝试使用下面的 - 基本上拼接使用[:8]返回的字符串到底

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

请注意,我用hexdigest代替digest。如果需要,您可以恢复相同。

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()你会得到你所期望的。