2014-07-26 59 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()你會得到你所期望的。