Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Боровков А.С. Методичка.doc
Скачиваний:
6
Добавлен:
09.06.2015
Размер:
210.43 Кб
Скачать

Контрольные суммы.

Любой файл на носителе состоит из последовательности байт, с помощью которых этот файл кодируется. Один байт состоит из 8 бит. Байт может принимать значения в диапазоне от 0 до 255 в десятичном представлении. Он принимает такие значения, потому что 8 бит – это 8 ячеек принимающих значения 0 или 1, число комбинаций из всевозможных состояний этих ячеек составляет как раз 256, или 28.

Например, число 810 = 000010002, 25510 = 111111112, 010 = 000000002.

Каждый байт имеет символьную интерпретацию (буква, цифра, знак и т.д.). Байт переводится в символ с помощью некой таблицы символьных преобразований, например, таблицы ASCII. В этой таблице каждому байту соответствует символ, и наоборот – каждому символу сопоставлено десятичное число от 0 до 255.

Любой файл можно прочитать с диска – либо по одному байту последовательно, либо массивами определенной длины. Теперь, зная, что файл представим на диске в виде последовательности чисел, можно сделать «отпечаток» этого файла и сохранить это значение в виде какого-либо числа.

Такой отпечаток называется контрольной суммой файла. Иными словами, контрольная сумма – это число или последовательность чисел. После подсчета контрольной суммы (КС) это значение можно будет где-либо сохранить, и если вдруг содержимое файла изменится (например, что-нибудь будет дописано, стерто или переписано), то новая КС тоже изменится.

КС используют для обнаружения изменений в файле. Иногда очень важна целостность файла и достоверность информации, но порой этот файл могут подменить или исказить данные в нем. Если нам неизвестна КС файла, нам будет и невдомек, что что-то не так. А, зная величину КС, можно быть уверенным, что этот файл был модифицирован.

Простейшим способом подсчета КС файла служит следующий алгоритм:

  1. Обнулить переменную контрольной суммы Sum

  2. Пока не конец файла

    1. Считать очередной байт

    2. Прибавить его к контрольной сумме

  3. Найти остаток от деления Sum на некое большое целое число.

В результате получим КС – целое число, которое лежит в диапазоне от 0 до N-1 включительно.

Число N должно быть достаточно велико для того, чтобы у двух разных файлов не было одинаковых КС. Если N = 2, то КС примет одно значение из двух: либо 0, либо 1. При N =4, КС примет значение в диапазоне от 0 до 3-х и т.д. То есть получается, что вероятность встретить два разных файла с одной контрольной суммой, равна . Чем больше N, тем эта вероятность меньше и метод более надежен. Идеальный случай, когда , но такое число нельзя задать, потому что память – ограниченная величина. Наиболее оптимально использовать N, равным 100 000 или 1 000 000.

В языке Turbo Pascal относительно целых чисел применимы следующие операции деления:

  1. Нахождение целой части от деления (оператор div);

15 div 2 = 7; 36 div 6 = 6

  1. Нахождение остатка от деления (оператор mod).

15 mod 2 = 1; 36 mod 6 = 0

Число, которое делят и на которое делят, а также остаток должны являться целыми числами. Речь о целочисленном типе и других типах переменных пойдет далее.