Форум сайта python.su
Доброго времени суток.
возникла необходимость подсчета контрольной суммы (SHA1) загружаемого через ФТП файла (на стороне сервера).
Если файл нормально загружается (т.е. без обрывов соединения) то хеш считается нормально.
Но… если, к примеру произошел обрыв связи -то я записываю в файл текущую контрольную сумму.
Собственно в чем вопрос: как можно продолжить подсчет контрольной суммы? т.е. к уже сохраненной контрольной сумме добавить недостающую часть (которая загрузится через какое-то время)?
вот кусок кода, который я использую для подсчета сумы:
import os
from pyftpdlib import ftpserver
import hashlib
class DTPHandler(ftpserver.DTPHandler):
def handle_read(self):
m = hashlib.sha1()
try:
chunk = self.recv(self.ac_in_buffer_size)
except socket.error:
self.handle_error()
else:
self.tot_bytes_received += len(chunk)
if not chunk:
self.transfer_finished = True
# тут запись в файл полученного значения
return
self.file_obj.write(self.data_wrapper(chunk))
m.update(chunk)
Офлайн
Посмотри на метод update в документации http://docs.python.org/library/hashlib.html
Офлайн
igor.kaistЯ видел этот методю Но дело в том, что если загрузить в него уже посчитанный хеш - то он еще раз хешируется и контрольная сумма потом уже не совпадает (((
Посмотри на метод update в документации http://docs.python.org/library/hashlib.html
Офлайн
Если я не ошибаюсь, то “дохешировать” нельзя, можно заново пересчитать.
Офлайн
прикольно :)
Вообще зависит от алгоритма хеширования, но вам в любом случае придется пересчитывать файл заново.
А если это отнимает слишком много ресурсов компа и у вас не сверх-супер-пупер надежная система, то можно использовать алгоритм попроще-быстрее.
Отредактировано (Фев. 23, 2010 18:33:21)
Офлайн