2013-03-21 81 views
-1

我正在尋找一種方法在Python中附加'1'位消息「,以便重新創建提及here的MD5算法。向字符串中添加1位

這是我做了什麼,但問題是,msg實際上是一個字符串:

msg.append(0x01)   
while len(msg)%56!=0: 
    msg.append(0x00)  

我該怎麼辦?

+0

如果您使用Python 3,可能轉換爲'bytes'有用嗎?例如,對於python中的md5實現,'bytes(msg.encode('utf-8'))' – Evert 2013-03-21 11:13:28

+0

請參閱[this](http://python.net/~gherman/programs/md5py/md5py.py)腳本。 – John 2013-03-21 12:34:08

+0

爲什麼要追加? *概念上* MD5要求你附加一些東西,但實際上你可以先通過算法運行「消息」,然後單獨運行「尾部」(當然,不需要重置狀態)。 – harold 2013-03-21 16:04:49

回答

0

使用chr將字節值轉換爲字符串。然後你可以將它們追加到msg

msg += chr(0x01 << 8) 
while len(msg)%56 != 0: 
    msg += chr(0x00) 

在Python 2.7中,ASCII字符串中的每個字符都是8位大。所以用這種方法,你不是每次都真的添加「1位」。這就是爲什麼有必要左移1次參數8次。否則,您會將0b00000001添加到字符串中,而不是所需的0b10000000