Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Расчёт контрольной суммы файла CRC-32 (Доработано)

Delphi , Синтаксис , Шифрование



Автор: MegaVolt
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Расчёт контрольной суммы файла CRC-32

Функция находит контрольную сумму файла FileName
(полное имя файла с путём). Если возникает ошибка
(файл не найден или его нельзя открыть для чтения)
выдаётся сообщение об этом. Если это не нужно
то удалить строки с выводом сообщения.

Зависимости: classes, Sysutils, Dialogs;
Автор:       MegaVolt, MegaVoltik@yahoo.com
Copyright:   :( Не помню :( Взято где то в сети
несколько доработано и после обсуждения в
Дата:        3 декабря 2002 г.
***************************************************** }

unit Crc32;

interface

uses
  classes, Sysutils, Dialogs;

function FileCRC32(const FileName: string): Cardinal;
function UpdateCRC32(InitCRC: Cardinal; BufPtr: Pointer; Len: Word): LongInt;

implementation

type
  CRCTable = array[0..255] of Cardinal;

const
  BufLen = 32768;

  CRC32Table: CRCTable =
  ($00000000, $77073096, $EE0E612C, $990951BA,
    $076DC419, $706AF48F, $E963A535, $9E6495A3,
    $0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988,
    $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91,

    $1DB71064, $6AB020F2, $F3B97148, $84BE41DE,
    $1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7,
    $136C9856, $646BA8C0, $FD62F97A, $8A65C9EC,
    $14015C4F, $63066CD9, $FA0F3D63, $8D080DF5,

    $3B6E20C8, $4C69105E, $D56041E4, $A2677172,
    $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B,
    $35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940,
    $32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59,

    $26D930AC, $51DE003A, $C8D75180, $BFD06116,
    $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F,
    $2802B89E, $5F058808, $C60CD9B2, $B10BE924,
    $2F6F7C87, $58684C11, $C1611DAB, $B6662D3D,

    $76DC4190, $01DB7106, $98D220BC, $EFD5102A,
    $71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433,
    $7807C9A2, $0F00F934, $9609A88E, $E10E9818,
    $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01,

    $6B6B51F4, $1C6C6162, $856530D8, $F262004E,
    $6C0695ED, $1B01A57B, $8208F4C1, $F50FC457,
    $65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C,
    $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65,

    $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2,
    $4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB,
    $4369E96A, $346ED9FC, $AD678846, $DA60B8D0,
    $44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9,

    $5005713C, $270241AA, $BE0B1010, $C90C2086,
    $5768B525, $206F85B3, $B966D409, $CE61E49F,
    $5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4,
    $59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD,

    $EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A,
    $EAD54739, $9DD277AF, $04DB2615, $73DC1683,
    $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8,
    $E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1,

    $F00F9344, $8708A3D2, $1E01F268, $6906C2FE,
    $F762575D, $806567CB, $196C3671, $6E6B06E7,
    $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC,
    $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5,

    $D6D6A3E8, $A1D1937E, $38D8C2C4, $04FDFF252,
    $D1BB67F1, $A6BC5767, $3FB506DD, $048B2364B,
    $D80D2BDA, $AF0A1B4C, $36034AF6, $041047A60,
    $DF60EFC3, $A867DF55, $316E8EEF, $04669BE79,

    $CB61B38C, $BC66831A, $256FD2A0, $5268E236,
    $CC0C7795, $BB0B4703, $220216B9, $5505262F,
    $C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04,
    $C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D,

    $9B64C2B0, $EC63F226, $756AA39C, $026D930A,
    $9C0906A9, $EB0E363F, $72076785, $05005713,
    $95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38,
    $92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21,

    $86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E,
    $81BE16CD, $F6B9265B, $6FB077E1, $18B74777,
    $88085AE6, $FF0F6A70, $66063BCA, $11010B5C,
    $8F659EFF, $F862AE69, $616BFFD3, $166CCF45,

    $A00AE278, $D70DD2EE, $4E048354, $3903B3C2,
    $A7672661, $D06016F7, $4969474D, $3E6E77DB,
    $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0,
    $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9,

    $BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6,
    $BAD03605, $CDD70693, $54DE5729, $23D967BF,
    $B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94,
    $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D);

var
  Buf: array[1..BufLen] of Byte;

function UpdateCRC32(InitCRC: Cardinal; BufPtr: Pointer; Len: Word): LongInt;
var
  crc: Cardinal;
  index: Integer;
  i: Cardinal;
begin
  crc := InitCRC;
  for i := 0 to Len - 1 do
  begin
    index := (crc xor Cardinal(Pointer(Cardinal(BufPtr) + i)^)) and $000000FF;
    crc := (crc shr 8) xor CRC32Table[index];
  end;
  Result := crc;
end;

function FileCRC32(const FileName: string): Cardinal;
var
  InFile: TFileStream;
  crc32: Cardinal;
  Res: Integer;
  BufPtr: Pointer;
begin
  BufPtr := @Buf;
  crc32 := $FFFFFFFF;
  try
    InFile := TFileStream.Create(FileName, fmShareDenyNone);
    Res := InFile.Read(Buf, BufLen);
    while (Res <> 0) do
    begin
      crc32 := UpdateCrc32(crc32, BufPtr, Res);
      Res := InFile.Read(Buf, BufLen);
    end;
    InFile.Destroy;
  except
    on E: Exception do
    begin
      if Assigned(InFile) then
        InFile.Free;
      ShowMessage(Format('При обработке файла [%s] вышла ' +
        'вот такая oшибочка [%s]', [FileName, E.Message]));
    end;
  end;
  Result := not crc32;
end;

end.

Пример использования:

var
  i: cardinal;
begin
  i := FileCRC32('c:\autoexec.bat');
  ShowMessage('Контрольная сумма файла = ' IntToStr(i));

Привет! Я переведу текст на русский язык:

Это модуль Delphi для расчета контрольной суммы CRC-32 файла. Модуль содержит две функции: UpdateCRC32 и FileCRC32.

Функция UpdateCRC32 обновляет контрольную сумму CRC-32, обработав буфер данных. Она принимает три параметра: InitCRC, начальное значение контрольной суммы CRC-32; BufPtr, указатель на буфер, содержащий данные для обработки; и Len, длина буфера.

Функция FileCRC32 рассчитывает контрольную сумму CRC-32 файла,指定ованного его именем. Она использует объект TFileStream для чтения файла в блоки, обновляя контрольную сумму после каждого блока. Если возникает ошибка при чтении или обработке файла (например, файл не существует), функция отображает сообщение об ошибке.

В коде:

  • Константный массив CRC32Table содержит предопределенные значения для алгоритма CRC-32.
  • Константа BufLen установлена в 32768, что является размером буфера, используемого функцией UpdateCRC32.
  • Функция FileCRC32 создает объект TFileStream и читает файл в блоки с помощью метода Read. Затем она обновляет контрольную сумму CRC-32 с помощью функции UpdateCRC32 после каждого блока.
  • Если возникает ошибка при чтении или обработке файла, функция отображает сообщение об ошибке с помощью процедуры ShowMessage.

Пример использования в конце кода демонстрирует, как использовать функцию FileCRC32 для расчета контрольной суммы CRC-32 файла и отображения ее в окне сообщений.

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

Также эта реализация не обрабатывает ошибки, которые могут возникнуть при расчете контрольной суммы CRC-32 (например, переполнение или подстановка). Вы можете добавить дополнительный код для обработки ошибок, чтобы обеспечить надежность.

Расчёт контрольной суммы файла CRC-32 (доработано).


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Шифрование ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 03:48:47/0.0038080215454102/0