Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2008.07.20;
Скачать: [xml.tar.bz2];

Вниз

Подскажите алгоритм вычисления контрольной суммы   Найти похожие ветки 

 
Sour Smile   (2007-11-20 12:25) [0]

Есть огромный файл, который разбит (логически) на несколько кусков. Контрольная сумма (сейчас я использую MD5) всего файла и каждого куска хранится в базе. Время от времени содержимое кусков меняется и приходится пересчитывать контрольную сумму не только изменённого куска, но и всего файла.
Подскажите, может есть алгоритм вычисления такой хитрой контрольной суммы, в которой для вычисления всего файла достаточно знать всего лишь контрольные суммы всех кусков?

Желательно, при этом, что бы алгоритм обладал особенностью (как она правильно называется?), когда с максимальной вероятностью гарантируется, что любые изменения в вычисляемом блоке, приводили к изменению значения самой суммы (такой особенность обладает MD5, SHA1 и другие). Без этого условия, конечно легко придумать простой алгоритм, например простое сложение всех байт :)


 
Jeer ©   (2007-11-20 17:15) [1]

1. Считать и запоминать контрольные суммы блоков
2. Считать контрольную сумму файла как конкатенацию контрольных сумм блоков

"Дешево и сердито"


 
Jeer ©   (2007-11-20 17:16) [2]

P.S.
Общее время резко уменьшится.


 
palva ©   (2007-11-21 11:14) [3]

> 2. Считать контрольную сумму файла как конкатенацию контрольных сумм блоков

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

MD5 - довольно медленный алгоритм. Можно использовать другой, например Sapphire II. Если контрольную сумму не нужно защищать от злоумышленников, то можно использовать очень простой алгоритм.


 
Jeer ©   (2007-11-21 13:02) [4]


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


Я, вообще-то, имел в виду КС файла = КС(Б1+Б2+Б3+..)
Неточно выразился. А метод расчета - на усмотрение автора с учетом требуемых надежности, быстродействия и защищенности.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2008.07.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.046 c
2-1214211036
Джоник__
2008-06-23 12:50
2008.07.20
Панели быстрого запуска


6-1174885444
Serega82
2007-03-26 09:04
2008.07.20
Передача файлов из браузера на web-сервер


2-1213774377
lewka-serdceed
2008-06-18 11:32
2008.07.20
Определение нажатия кнопки


3-1202726641
pavel_guzhanov
2008-02-11 13:44
2008.07.20
Непонятность с null в хранимой процедуре


3-1202394482
AlexeyMir
2008-02-07 17:28
2008.07.20
Кэширование и Firebird





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский