Расчёт контрольной суммы файла CRC-32 (Доработано)Delphi , Синтаксис , Шифрование
Автор: MegaVolt { **** 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 файла. Модуль содержит две функции: Функция Функция В коде:
Пример использования в конце кода демонстрирует, как использовать функцию Обратите внимание, что это реализация предполагает, что файл находится на локальном файловом системе. Если вам нужно обрабатывать файлы на сетевом диске или другом удаленном месте, вы может потребоваться модифицировать код соответствующим образом. Также эта реализация не обрабатывает ошибки, которые могут возникнуть при расчете контрольной суммы CRC-32 (например, переполнение или подстановка). Вы можете добавить дополнительный код для обработки ошибок, чтобы обеспечить надежность. Расчёт контрольной суммы файла CRC-32 (доработано). Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Шифрование ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |