Подтвердить что ты не робот

Сериализовать состояние вычисления MD5 и возобновить его позже?

Я хочу сериализовать/десериализовать контекст md5. Но я не знаю, как это сделать на Python. Псевдокод того, что я хочу сделать.

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

Для этого существуют библиотеки С++. Есть ли для Python? Почему библиотека md5 не поддерживает его? Существуют ли проблемы безопасности? Спасибо.

Отредактировано: Я хочу сделать это, потому что, например, HTTP-сервер хочет принимать потоковые данные в разных HTTP-запросах. Было бы удобно сериализовать контекст md5 как-то между запросами.

4b9b3361

Ответ 1

Я спросил г-на Гвидо В Россума. Он ответил, что "я не думаю, что есть способ, но это может сделать достойный запрос функции. Вы можете отправить его на bugs.python.org". Так я и сделал.

http://bugs.python.org/issue16059

Ответ 2

Объекты HASH не могут быть сериализованы: Как сериализовать хеш-объекты в 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")