2012-09-25 6 views
10

Chcę serializować/deserializować kontekst md5. Ale nie wiem jak to zrobić w Pythonie. Pseudokod z tego, co chcę zrobić.Serializuj stan obliczeń MD5 i wznów później?

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

Istnieją biblioteki C++ do tego. Czy jest jeden dla Pythona? Dlaczego biblioteka md5 go nie obsługuje? Czy istnieją obawy dotyczące bezpieczeństwa? Dzięki.

Edytowane: Chcę to zrobić, ponieważ na przykład serwer HTTP chce akceptować dane strumieniowe w różnych żądaniach HTTP. Byłoby wygodnie serializować kontekst Md5 w jakiś sposób pomiędzy żądaniami.

+0

Dlaczego chcesz to zrobić? –

+3

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

+0

Dzięki. Biblioteka pypy mówi, że nie należy jej używać, ponieważ nie jest testowana = (dlaczego ten oficjalny python md5 nie implementuje tego? – Yey

Odpowiedz

1

Poprosiłem Guido V Rossum. Odpowiedział, że "nie sądzę, że jest jakiś sposób, ale może złożyć przyzwoitą prośbę o funkcję. Możesz przesłać ją na bugs.python.org". Więc zrobiłem.

http://bugs.python.org/issue16059

0

obiekty Hash nie są serializable: How to serialize hash objects in Python

Zakładając można przechodzić wokół danych 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")