2012-09-25 23 views
10

我想序列化/反序列化md5上下文。但我不知道如何用Python做到這一點。 我想要做的僞代碼。序列化MD5計算狀態並稍後恢復?

import md5 
# Start hash generation 
m = md5.new() 
m.update("Content") 

# Serialize m 
serialized_m = serialize(m) 

# In another function/machine, deserialize m 
# and continue hash generation 
m2 = deserialize(serialized_m) 
m2.update("More content") 
m2.digest()  

這裏有C++庫。有Python嗎?爲什麼md5庫不支持它?有沒有安全問題?謝謝。

編輯: 我想這樣做,因爲例如,HTTP服務器想要接受不同HTTP請求中的流數據。在請求之間以某種方式序列化md5上下文會很方便。

+0

你爲什麼要那麼做? –

+3

http://stackoverflow.com/questions/5865824/hash-algorithm-for-dynamic-growing-streaming-data – Kevin

+0

謝謝。 pypy庫說不使用它因爲它沒有測試=(爲什麼官方的python md5沒有實現這個壽命? – Yey

回答

1

我問先生圭多V Rossum的。他回答說:「我認爲沒有辦法,但它可能會提出一個不錯的功能要求,你可以提交一個到bugs.python.org。」所以我做了。

http://bugs.python.org/issue16059

0

HASH對象不能序列:How to serialize hash objects in Python

假設你可以繞過散列的數據:

from Crypto.Hash import MD5 

# generate hash 
m = MD5.new() 
s = "foo" 
m.update(s) 

# serialize m 
serialized = s 

# deserialize and continue hash generation 
m2 = MD5.new(serialized) 
if m2.hexdigest() == m.hexdigest(): 
    print "success" 
m2.update("bar")