Конференция "Основная" » Подскажите алгоритм вычисления контрольной суммы [D6, Win2k]
 
  • Sour Smile (20.11.07 12:25) [0]
    Есть огромный файл, который разбит (логически) на несколько кусков. Контрольная сумма (сейчас я использую MD5) всего файла и каждого куска хранится в базе. Время от времени содержимое кусков меняется и приходится пересчитывать контрольную сумму не только изменённого куска, но и всего файла.
    Подскажите, может есть алгоритм вычисления такой хитрой контрольной суммы, в которой для вычисления всего файла достаточно знать всего лишь контрольные суммы всех кусков?

    Желательно, при этом, что бы алгоритм обладал особенностью (как она правильно называется?), когда с максимальной вероятностью гарантируется, что любые изменения в вычисляемом блоке, приводили к изменению значения самой суммы (такой особенность обладает MD5, SHA1 и другие). Без этого условия, конечно легко придумать простой алгоритм, например простое сложение всех байт :)
  • Jeer © (20.11.07 17:15) [1]
    1. Считать и запоминать контрольные суммы блоков
    2. Считать контрольную сумму файла как конкатенацию контрольных сумм блоков

    "Дешево и сердито"
  • Jeer © (20.11.07 17:16) [2]
    P.S.
    Общее время резко уменьшится.
  • palva © (21.11.07 11:14) [3]
    > 2. Считать контрольную сумму файла как конкатенацию контрольных сумм блоков

    Или как XOR, чтобы длина была такая же.

    MD5 - довольно медленный алгоритм. Можно использовать другой, например Sapphire II. Если контрольную сумму не нужно защищать от злоумышленников, то можно использовать очень простой алгоритм.
  • Jeer © (21.11.07 13:02) [4]

    > Или как XOR, чтобы длина была такая же.


    Я, вообще-то, имел в виду КС файла = КС(Б1+Б2+Б3+..)
    Неточно выразился. А метод расчета - на усмотрение автора с учетом требуемых надежности, быстродействия и защищенности.
 
Конференция "Основная" » Подскажите алгоритм вычисления контрольной суммы [D6, Win2k]
Есть новые Нет новых   [133935   +108][b:0][p:0]