Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];

Вниз

Алгоритмы подсчета контрольной суммы   Найти похожие ветки 

 
Grrey   (2002-07-16 09:42) [0]

Есть задача - проверить обрабатываемую информацию! Собираюсь использовать контрольную сумму, но алгоритмы не знаю! Если кто в курсе, помогите чем можите (статьи, ссылки и любые доки принимаются с благодагностью!)


 
Mike_Goblin   (2002-07-16 09:46) [1]

http://lib.mipt.ru/books/Security/hacking/ReverseCRC.htm


 
Grrey   (2002-07-16 14:32) [2]

Спасибо!
А на русском ничего нет?


 
Eugene Lachinov   (2002-07-16 14:38) [3]

Не на русском, но надеюсь, понятном :-)

unit Crc_32;

interface

uses
Classes{$IFDEF WIN32}, Windows;{$ELSE};
type
DWORD = LongInt;
{$ENDIF}

const
CrcSeed = $ffffffff;

function Crc32(Buffer : Pointer; const BufLen : DWord; Crc : DWord = CrcSeed) : DWORD;

function Crc8(Buffer : Pointer; BufLen : DWord; Crc : Byte) : Byte;

function StringCrc8(const S : string; CRC : Byte) : Byte;

function StringCrc32(const S : string; CRC : DWORD = CrcSeed) : DWORD;

function CrcString (Crc : DWORD) : string;

function CrcStream(Stream : TStream) : DWORD;

function CrcFile(const FileName : string) : DWORD;

implementation

uses
SysUtils;

const
crctable8 : array[0..255] of Byte = (
$00,$5E,$BC,$E2,$61,$3F,$DD,$83,$C2,$9C,$7E,$20,$A3,$FD,$1F,$41,
$9D,$C3,$21,$7F,$FC,$A2,$40,$1E,$5F,$01,$E3,$BD,$3E,$60,$82,$DC,
$23,$7D,$9F,$C1,$42,$1C,$FE,$A0,$E1,$BF,$5D,$03,$80,$DE,$3C,$62,
$BE,$E0,$02,$5C,$DF,$81,$63,$3D,$7C,$22,$C0,$9E,$1D,$43,$A1,$FF,
$46,$18,$FA,$A4,$27,$79,$9B,$C5,$84,$DA,$38,$66,$E5,$BB,$59,$07,
$DB,$85,$67,$39,$BA,$E4,$06,$58,$19,$47,$A5,$FB,$78,$26,$C4,$9A,
$65,$3B,$D9,$87,$04,$5A,$B8,$E6,$A7,$F9,$1B,$45,$C6,$98,$7A,$24,
$F8,$A6,$44,$1A,$99,$C7,$25,$7B,$3A,$64,$86,$D8,$5B,$05,$E7,$B9,
$8C,$D2,$30,$6E,$ED,$B3,$51,$0F,$4E,$10,$F2,$AC,$2F,$71,$93,$CD,
$11,$4F,$AD,$F3,$70,$2E,$CC,$92,$D3,$8D,$6F,$31,$B2,$EC,$0E,$50,
$AF,$F1,$13,$4D,$CE,$90,$72,$2C,$6D,$33,$D1,$8F,$0C,$52,$B0,$EE,
$32,$6C,$8E,$D0,$53,$0D,$EF,$B1,$F0,$AE,$4C,$12,$91,$CF,$2D,$73,
$CA,$94,$76,$28,$AB,$F5,$17,$49,$08,$56,$B4,$EA,$69,$37,$D5,$8B,
$57,$09,$EB,$B5,$36,$68,$8A,$D4,$95,$CB,$29,$77,$F4,$AA,$48,$16,
$E9,$B7,$55,$0B,$88,$D6,$34,$6A,$2B,$75,$97,$C9,$4A,$14,$F6,$A8,
$74,$2A,$C8,$96,$15,$4B,$A9,$F7,$B6,$E8,$0A,$54,$D7,$89,$6B,$35);

crctable32 : array[0..255] of DWORD = (
$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,$4fdff252,$d1bb67f1,$a6bc5767,$3fb506dd,$48b2364b,
$d80d2bda,$af0a1b4c,$36034af6,$41047a60,$df60efc3,$a867df55,
$316e8eef,$4669be79,$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);


 
Eugene Lachinov   (2002-07-16 14:39) [4]


function Crc8(Buffer : Pointer; BufLen : DWord; Crc : Byte) : Byte;
asm
push edi
mov edi, eax
mov al, cl
mov ecx, edx
and ecx, ecx
jz @Exit
and edi, edi
jz @Exit
xor edx, edx
@Start:
mov dl, al
xor dl, [edi]
mov al, byte ptr [edx + crctable8]
inc edi
loop @Start
@Exit:
pop edi
end;

const
MaxStrucSize = 65520;

function Crc32(Buffer : Pointer; const BufLen : DWord; Crc : DWord) : DWORD; assembler;
asm
push edi
mov edi, eax
mov eax, ecx
mov ecx, edx
and ecx, ecx
jz @Exit
and edi, edi
jz @Exit
@Start:
xor edx, edx
mov dl, al
shr eax, 8
xor dl, [edi]
xor eax, dword ptr [4 * edx + crctable32]
inc edi
loop @Start
@Exit:
pop edi
end;

function CrcString (Crc : DWORD) : string;
const
hexChars: array [0..$F] of Char = "0123456789ABCDEF";
var
i : byte;
begin
{$IFDEF WIN32}
SetLength(Result, 8);
{$ELSE}
Result[0] := #8;
{$ENDIF}
for i := 8 downto 1 do begin
Result[i] := HexChars[crc and $F];
crc := crc shr 4;
end
end;

function CrcStream(Stream : TStream) : DWORD;
var
P : Pointer;
C : LongInt;
begin
Result := CrcSeed;
GetMem(P, 8192);
try
Stream.Position := 0;
while Stream.Position < Stream.Size do begin
C := Stream.Read(P^, 8192);
Result := Crc32(P, C, Result)
end
finally
FreeMem(P, 8192)
end;
Result := Result xor CrcSeed
end;

function StringCrc32(const S : string; CRC : DWORD) : DWORD;
begin
Result := Crc32(@S[1], Length(S), CRC)
end;

function StringCrc8(const S : string; Crc : Byte) : Byte;
begin
Result := Crc8(@S[1], Length(S), Crc)
end;

function CrcFile(const FileName : string) : DWORD;
var
Stream : TFileStream;
begin
Stream := TFileStream.Create(FileName, fmOpenRead + fmShareDenyNone);
try
Result := CrcStream(Stream)
finally
Stream.Free
end
end;


end.


 
Grrey   (2002-07-16 14:46) [5]

Спасибо!
А на русском ничего нет?


 
Grrey   (2002-07-16 14:56) [6]

Громадное СПАСИБО!!!!
Это именно то, что нужно!
КЛАСС!!!


 
Grrey   (2002-07-16 14:57) [7]

Спасибо!
А на русском ничего нет?


 
Krok   (2002-07-16 15:02) [8]

Я еще вариант на мыло послал(он попроще) - глянь



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
3-95188
AlexanderG
2002-07-05 10:43
2002.07.29
Как снести сервер


3-95242
Приятель
2002-06-18 11:45
2002.07.29
Delphi & ADO


14-95563
Polygon
2002-07-03 13:58
2002.07.29
IBX for Kylix 2


1-95382
Fissher
2002-07-15 20:09
2002.07.29
Снова я со своим ComboBox-ом !!!


3-95271
Дундук
2002-07-09 09:43
2002.07.29
Ввод в DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский