Форум сайта python.su
0
Доброго времени суток.
возникла необходимость подсчета контрольной суммы (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)
Офлайн
3
Посмотри на метод update в документации http://docs.python.org/library/hashlib.html
Офлайн
0
igor.kaistЯ видел этот методю Но дело в том, что если загрузить в него уже посчитанный хеш - то он еще раз хешируется и контрольная сумма потом уже не совпадает (((
Посмотри на метод update в документации http://docs.python.org/library/hashlib.html
Офлайн
0
Если я не ошибаюсь, то “дохешировать” нельзя, можно заново пересчитать.
Офлайн
0
прикольно :)
Вообще зависит от алгоритма хеширования, но вам в любом случае придется пересчитывать файл заново.
А если это отнимает слишком много ресурсов компа и у вас не сверх-супер-пупер надежная система, то можно использовать алгоритм попроще-быстрее.
Отредактировано (Фев. 23, 2010 18:33:21)
Офлайн