2012-09-25 2 views
10

Voglio serializzare/deserializzare il contesto md5. Ma non so come farlo in Python. Pseudocodice di ciò che voglio fare.Serializza lo stato di computazione MD5 e riprendi dopo?

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()  

Ci sono librerie C++ per questo. Ce n'è uno per Python? Perché la libreria md5 non lo supporta? Ci sono problemi di sicurezza? Grazie.

Modificato: Voglio farlo perché, ad esempio, un server HTTP vuole accettare i dati di streaming in diverse richieste HTTP. Sarebbe conveniente serializzare il contesto md5 in qualche modo tra le richieste.

+0

Perché vuoi farlo? –

+3

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

+0

Grazie. La libreria di Pypy dice di non usarla perché non è testata = (perché il Python ufficiale md5 non lo implementa? – Yey

risposta

1

ho chiesto Guido V Rossum. Ha risposto che "non penso che ci sia un modo, ma potrebbe fare una richiesta decente di funzionalità. Puoi inviarne una a bugs.python.org". Così ho fatto.

http://bugs.python.org/issue16059

0

oggetti HASH non sono serializzabile: How to serialize hash objects in Python

Supponendo che è possibile passare in giro per i dati unhashed:

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")