Скачать Вычисление CRC-32

17.06.1994
Скачать файл (8,21 Кб)

----- Пакет CRC32, версия 2 -----
----- Вычисление контрольного кода CRC-32 -----
----- Турбо Паскаль 6.0, Ассемблер -----

  Торговые марки:
- PKZIP принадлежит PKWARE, Inc.;
- ARJ принадлежит Роберту К. Янгу (Robert K Jung).;
- Turbo PASCAL и Turbo Assembler принадлежат  Borland  Internatio-
  nal, Inc.;
- Turbo Professional принадлежит TurboPower Software.

     CRC32 распространяется по принципу SOURCEWARE  -  свободно  с
исходным текстом. Он может быть свободно  использован  кем  угодно
для некоммерческих целей. Его можно распространять,  сохраняя  имя
автора и не внося никаких изменений.

     CRC32 распространяется AS-IS, то есть, автор отвергает всякую
ответственность и весь возможный риск ложится на пользователя.

     Copyright (C) 1991, А.Е. Колесников.

     CRC32 состоит из следующих компонент:

Имя файла   Размер     Дата    Время    CRC-32  Примечание
------------------------------------------------------------------
README.1ST     818 22/05/92 16:00:00  824ccfd3
CRC32.ASM     2301 28/12/91 19:00:00  020520f1  Для TASM 2.0
CRC32.DOC     5024 22/05/92 16:00:00  ????????  Этот документ
CRCDIR.EXE   31296 28/12/91 19:00:00  f8b3583d  После TP 6.0
CRCTEST.EXE  17072 28/12/91 19:00:00  ba25b170  После TP 6.0
CRC32.OBJ      343 28/12/91 19:00:00  aa6a19b7  После TASM 2.0
CRC32.PAS     3300 28/12/91 19:00:00  02e41cfc  Для TP 6.0
CRCDIR.PAS   10173 28/12/91 19:00:00  a601852c  Печать оглавлений
CRCTEST.PAS    385 28/12/91 19:00:00  4111c388  Простой пример
CRC32.TPU     1568 28/12/91 19:00:00  82ea9dec  После TP 6.0
TPCRT.TPU    26880 04/01/90 05:09:00  0d0d92cc  \ Из Turbo Profes-
TPDOS.TPU    12448 04/01/90 05:09:00  3b97da9b  | sional 5.09 для
TPHEAP6.TPU    432 04/01/90 05:09:00  1ad325dd  | CRCDIR.PAS
TPINLINE.TPU  1792 04/01/90 05:09:00  7ae6f42d  | (доработка
TPSTRING.TPU 14608 04/01/90 05:09:00  ed9673d9  /  к Паскалю 6.0)
------------
        Всего 15 файлов
------------------------------------------------------------------
!!! Примечание составителя:
    Бинарные файлы и модули из библиотеки Turbo Professional 5.09
    НЕ ВКЛЮЧЕНЫ по понятным причинам
------------------------------------------------------------------
     Модуль CRC32.TPU вычисляет контрольный код CRC-32 для  задан-
ной последовательности байтов. Это тот самый контрольный код,  ко-
торый используется архиваторами PKZIP фирмы PKWARE,  Inc.,  и  ARJ
Роберта К. Янга. Известно, что CRC-32 вычисляется на неупакованном
файле.

     Для вычисления CRC-32 заданной последовательности байтов надо
применить три процедуры. Первая - InitCRC - инициализирует  CRC-32
значением $FFFFFFFF. Затем надо помещать порции заданной  последо-
вательности в буфер и для каждой порции вызывать IncCRC.  В  конце
FinishCRC инвертирует все биты результата.

     Две другие функции, CRCFileB и  CRCFile,  позволяют  получить
CRC-32 заданного файла. Они возвращают целый результат -  значение
IOResult, полученное в процессе чтения (порции)  файла.  Если  ре-
зультат -  0, все в порядке; ненулевой результат  означает  ошибку
чтения.

     Включены две демонстрационные программы -  CRCTEST и CRCDIR.

     Две основные программы реализованы на TASM 2.0, остальные  на
Turbo PASCAL 6.0 с использованием Turbo Professional 5.09.

     CRC-32 инициализируется значением $FFFFFFFF. Потом для каждо-
го байта B входной последовательности CRC-32 сдвигается вправо  на
1 байт. Если байты CRC-32 были {C1,C2,C3,C4} (C1 - старший,  C4  -
младший), сдвиг дает {0,C1,C2,C3}. Младший байт C4 побитно склады-
вается с B по модулю 2 (C4 xor B). Новым  значением  CRC-32  будет
его сдвинутое значение, сложенное побитно  по  модулю  2  (xor)  с
4-байтовой величиной  из  "магической"  таблицы  с  использованием
[B xor C4] в качестве индекса.
     Было: CRC-32 = {C1,C2,C3,C4} и получили очередной байт B.
     Стало:
           CRC-32 = { 0,C1,C2,C3} xor Magic[B xor C4].
     На Паскале:
     CRC := (CRC shr 8) xor Magic[B xor byte(CRC and $FF)];
     (здесь CRC - longint, Magic - array[byte] of longint).

     Последний этап вычисления CRC-32 - инвертировать все биты:
     CRC := not CRC;

     Инициализация магической таблицы очень сложна и я  воздержусь
от ее описания здесь. Почитайте CRC32.ASM.

     Очевидное применение этих алгоритмов -  проверка  целостности
файлов.

     Для контакта:
              277028 Молдова, Кишинев,
              ул. Академии 5,
              Институт математики АН Молдовы,
              Колесников Александр Евгеньевич
              Тел.: (код 0422) 73-80-58, 72-59-82 (дирекция).