主页
Top.Mail.Ru Yandeks.Metrika
论坛:“主要”;
当前存档: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;

接口

使用
Classes{$IFDEF WIN32}, Windows;{$ELSE};
类型
DWORD = LongInt;
{$ ENDIF}

常量
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;

履行

使用
SysUtils单元;

常量
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
@启动:
mov dl, al
xor dl, [edi]
mov al, byte ptr [edx + crctable8]
inc edi
loop @Start
@Exit:
pop edi
结束;

常量
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
@启动:
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
结束;

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

function CrcStream(Stream : TStream) : DWORD;
VAR
P:指针;
C : LongInt;
开始
Result := CrcSeed;
GetMem(P,8192);
尝试
Stream.Position := 0;
while Stream.Position < Stream.Size do begin
C := Stream.Read(P^, 8192);
Result := Crc32(P, C, Result)
结束
最后
FreeMem(P, 8192)
结束;
Result := Result xor CrcSeed
结束;

function StringCrc32(const S : string; CRC : DWORD) : DWORD;
开始
Result := Crc32(@S[1], Length(S), CRC)
结束;

function StringCrc8(const S : string; Crc : Byte) : Byte;
开始
Result := Crc8(@S[1], Length(S), Crc)
结束;

function CrcFile(const FileName : string) : DWORD;
VAR
Stream : TFileStream;
开始
Stream := TFileStream.Create(FileName, fmOpenRead + fmShareDenyNone);
尝试
Result := CrcStream(Stream)
最后
Stream.Free
结束
结束;


结束。



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

谢谢大家!
А на русском ничего нет?



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

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



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

谢谢大家!
А на русском ничего нет?



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

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



Страницы: 1 整个分支

论坛:“主要”;
当前存档:2002.07.29;
下载:[xml.tar.bz2];

楼上









内存:0.59 MB
时间:0.025 c
4-95604
巴拉圭
2002-05-20 23:46
2002.07.29
位图 - >图标


3-95234
Akhmadey
2002-07-08 21:04
2002.07.29
EhLib


14-95569
fJohn
2002-07-04 10:48
2002.07.29
按键


1-95366
neodiX
2002-07-15 19:38
2002.07.29
活动窗口


14-95504
NEOX
2002-07-01 23:31
2002.07.29
在线拼写检查





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法文
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本性玩偶 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 泰米尔人 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский