2012-09-25 31 views
10

Quiero serializar/deserializar el contexto md5. Pero no sé cómo hacerlo en Python. Pseudocódigo de lo que quiero hacer.Serialize MD5 computation-state y resume más tarde?

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

Existen bibliotecas C++ para esto. ¿Hay uno para Python? ¿Por qué la biblioteca md5 no lo admite? ¿Hay problemas de seguridad? Gracias.

Editado: Quiero hacer esto porque, por ejemplo, un servidor HTTP desea aceptar datos de transmisión en diferentes solicitudes HTTP. Sería conveniente serializar el contexto md5 de alguna manera entre las solicitudes.

+0

¿Por qué quieres hacer eso? –

+3

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

+0

Gracias. La biblioteca pypy dice que no la use porque no está probada = (¿por qué el python md5 oficial no implementa esto? – Yey

Respuesta

1

me preguntó D. Guido V Rossum. Él respondió que "no creo que haya una manera. Sin embargo, podría ser una solicitud de características decente. Podría enviar una a bugs.python.org". Así que lo hice.

http://bugs.python.org/issue16059

0

objetos HASH no son serializable: How to serialize hash objects in Python

Asumiendo que puede pasar alrededor de los datos sin troceo:

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