Используя нижеследующую функцию можно запросто рассчитывать контрольную сумму в своих прогах
CODE NOW!
unit CRC32;
{CRC32 рассчитывает код циклической избыточности (cyclic redundancy code - CRC),
известный как CRC-32, с использованием алгоритма byte-wise ("мудрый байт").
(C) Авторские права 1989, 1995-1996 Earl F. Glynn, Overland Park, KS.
Все права защищены.
Данный модуль является производным от программы CRCT FORTRAN 77, опубликованной
в "Byte-wise CRC Calculations" за авторством Aram Perez из IEEE Micro, Июнь 1983,
страницы 40-50. Константы для полиномиального генератора CRC-32, приведенные
здесь, опубликованы в "Microsoft Systems Journal", Март 1995, страницы 107-108.
Данный CRC алгоритм имеет бОльшую скорость за счет 512 элементов таблицы
поиска.}
interface
procedure CalcCRC32(p: pointer; nbyte: WORD; var CRCvalue: LongInt);
procedure CalcFileCRC32(FromName: string; var CRCvalue: LongInt;
var IOBuffer: pointer; BufferSize: WORD; var TotalBytes: LongInt;
var error: WORD);
type
buffer = array[1..65521] of BYTE; { самый большой буфер, который }
{ только можно распределить в Куче }
var
i: WORD;
q: ^buffer;
procedure CalcCRC32(p: pointer; nbyte: WORD; var CRCvalue: LongInt);
{Ниже выполняется небольшое криптование (но выполняется очень быстро).
Алгоритм работает следующим образом:
1. совершаем операцию "И/ИЛИ" (XOR) входного байта с младшей
частью регистра CRC для получения INDEX
2. сдвигаем регистр CRC на восемь битов вправо
3. совершаем операцию "И/ИЛИ" (XOR) с CRC регистром и
Table[INDEX]
4. повторяем шаги с 1 по 3 для всех байтов }
begin
q := p;
for i := 1 to nBYTE do
CRCvalue := (CRCvalue shr 8) xor
Table[q^[i] xor (CRCvalue and $000000FF)]
end {CalcCRC32};
procedure CalcFileCRC32(FromName: string; var CRCvalue: LongInt;
var IOBuffer: pointer; BufferSize: WORD; var TotalBytes: LongInt;
var error: WORD);
var
BytesRead: WORD;
FromFile: file;
i: WORD;
begin
FileMode := 0; {Turbo по умолчанию 2 для R/W и 0 для R/O}
CRCValue := $FFFFFFFF;
ASSIGN(FromFile, FromName);
{$I-}RESET(FromFile, 1);
{$I+}
error := IOResult;
if error = 0 then
begin
TotalBytes := 0;
repeat
BlockRead(FromFile, IOBuffer^, BufferSize, BytesRead);
CalcCRC32(IOBuffer, BytesRead, CRCvalue);
INC(TotalBytes, BytesRead)
until BytesRead = 0;
CLOSE(FromFile)
end;
CRCvalue := not CRCvalue
end {CalcFileCRC32};
end {CRC}.
Комментарии
отсутствуют
Добавление комментария
:: Последние обновления ::
04.09.2011 Долгожданный релиз VB Decompiler. Масса улучшений декомпиляции Native Code. Значительно расширенна и обновлена справочная система на русском и английском языках.
20.12.2010 DotFix Software поздравляет наших клиентов и посетителей сайта с наступающим Новым Годом и рождеством! Желаем приятно провести праздники и успехов в новом году!
28.11.2010 Выпущена новая версия защиты DotFix NiceProtect. Основные изменения коснулись обфускатора Delphi программ. Теперь имеется полная поддержка Tab и Page контролов на формах, что обеспечивает максимальную совместимость обфускации с Delphi XE программами.
21.10.2010 Обновлен декомпилятор Visual Basic программ до версии 8.1. Декомпиляция P-Code программ становится все более идеальной, также проделана большая работа по улучшению анализа Native Code и .NET приложений.
16.09.2009 Полностью обновлен движок сайта! Теперь все ссылки имеют читаемый понятный вид, разного рода глюки на страницах убраны. И теперь сайт полноценно работает на второй версии нашего движка.