Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit EncDec;
- interface
- uses
- windows,MMSystem, SysUtils,Functions;
- procedure Encrypt(Src:array of byte; Len:Word);
- function Decrypt(Src:array of byte; Len:Word): boolean;
- implementation
- uses
- Main,packets;
- var
- EncDecKeys: array[0..511] of Byte =
- ($52, $B3, $F7, $20, $34, $FB, $8E, $4C, $21, $2A, $64, $E9, $2F, $89, $E7, $B9, $F1, $F2, $DF, $79, $F9, $40, $09, $FF,
- $9A, $04, $02, $85, $F3, $7A, $67, $45, $28, $BB, $3B, $46, $F3, $33, $89, $75, $5C, $56, $4A, $F7, $C4, $8F, $88, $BE, $28, $79, $C4, $5A,
- $A4, $52, $96, $12, $36, $AD, $93, $34, $C5, $66, $73, $A9, $62, $DB, $74, $CC, $CD, $59, $F9, $7D, $3B, $D5, $77, $70, $56, $DD, $91, $CB,
- $86, $CE, $82, $F1, $6F, $46, $BC, $98, $BB, $DC, $CE, $22, $19, $0F, $8B, $2A, $85, $7D, $69, $5D, $CB, $56, $27, $8B, $46, $0F, $B3, $FD,
- $EE, $5B, $4A, $0A, $92, $57, $E1, $E5, $61, $04, $C4, $B9, $AF, $FB, $7D, $F8, $F6, $5C, $F7, $F0, $1B, $08, $E3, $9F, $F3, $10, $5B, $C8,
- $06, $6D, $C5, $46, $93, $F1, $FB, $A1, $D4, $7D, $A9, $DF, $82, $75, $F6, $9C, $9C, $71, $66, $5D, $65, $35, $FE, $22, $AC, $E4, $AA, $3A,
- $4F, $70, $DD, $5B, $02, $55, $77, $F2, $4D, $87, $EB, $B8, $D4, $A8, $A1, $86, $DB, $7F, $99, $6A, $09, $A6, $52, $FA, $6C, $82, $EA, $E8,
- $BE, $78, $86, $D7, $E7, $5E, $F4, $6D, $C2, $30, $8F, $AA, $24, $05, $63, $78, $1B, $41, $92, $83, $73, $0B, $F7, $4A, $7F, $02, $08, $77,
- $16, $2B, $01, $6B, $DB, $2E, $3F, $1E, $C1, $C3, $E9, $26, $CF, $67, $D6, $15, $21, $53, $AB, $08, $30, $AE, $44, $7D, $53, $02, $56, $65,
- $85, $ED, $52, $7B, $68, $19, $8C, $D3, $8A, $6D, $9C, $B6, $E7, $85, $04, $AD, $B0, $60, $14, $DC, $4B, $59, $0B, $91, $9B, $59, $7F, $1D,
- $81, $4A, $FF, $E3, $A3, $CF, $F6, $AE, $6C, $32, $D2, $48, $54, $9E, $66, $48, $61, $8E, $8D, $2B, $ED, $85, $11, $A6, $AB, $00, $CB, $3B,
- $E5, $A8, $07, $CD, $3A, $EB, $61, $10, $BD, $B9, $29, $5F, $1D, $F1, $BF, $27, $65, $7B, $35, $C4, $CC, $C7, $0F, $3D, $94, $1C, $47, $2E,
- $32, $2D, $95, $05, $AF, $EE, $ED, $71, $4E, $A5, $48, $18, $6F, $44, $A7, $89, $B3, $F6, $55, $71, $61, $F8, $6D, $11, $09, $AA, $9D, $EF,
- $67, $E6, $29, $CC, $89, $90, $33, $D7, $34, $6E, $39, $20, $85, $3A, $DF, $4F, $D4, $F6, $EF, $96, $DD, $80, $9E, $E4, $22, $66, $11, $5C,
- $8B, $FB, $1F, $05, $50, $AB, $59, $C3, $18, $8B, $47, $86, $63, $34, $F5, $C1, $25, $D2, $AE, $1E, $B3, $78, $08, $70, $E3, $B7, $21, $E8,
- $6F, $6E, $27, $8D, $9B, $E3, $1E, $E6, $18, $13, $DD, $F9, $27, $47, $5A, $7A, $02, $E8, $28, $3C, $77, $94, $3E, $EB, $D6, $71, $FA, $FD,
- $0D, $C2, $66, $E6, $12, $B8, $B9, $8B, $81, $8A, $21, $FA, $87, $C8, $BF, $58, $FE, $EC, $F3, $1A, $D9, $32, $DB, $79, $C3, $A9, $16, $1F,
- $03, $8A, $CE, $27, $A3, $C9, $F5, $44, $D1, $EB, $CE, $40, $85, $17, $B0, $A9, $64, $6F, $07, $C7, $E5, $A1, $9B, $D0, $B2, $B8, $15, $5F,
- $51, $39, $BF, $23, $03, $6B, $8B, $D4, $EC, $F6, $57, $6C);
- procedure Encrypt(Src:array of byte; Len:Word);
- var
- I, P, Pos : Integer;
- Sum1, Sum2, Key, Rand_key : Integer;
- Pac : array[0..99] of byte;
- Buffer, Time: LongInt;
- begin
- Sum1:=0; Sum2:=0;
- P :=4; I :=1;
- Randomize;
- rand_key := Random(255);
- BufferDest[0]:= WordRec(Len).Lo;
- BufferDest[1]:= WordRec(Len).Hi;
- BufferDest[3]:= Rand_key;
- Src[2]:= 0;
- Src[8] := LongInt(TimeGetTime);
- Pos:= EncDecKeys[Rand_key * 2];
- while (i < (len shr 2)) do begin
- Key := EncDecKeys[((pos and $FF) * 2) + 1];
- Pac[0] := Src[P];
- Pac[1] := Src[P+1];
- Pac[2] := Src[P+2];
- Pac[3] := Src[P+3];
- Move(PAC[0],Buffer,Sizeof(Buffer));
- Sum1 := Sum1 + Buffer;
- case (i and 3) of
- 0:
- begin
- Key := Key * 4;
- Buffer := (Buffer + Key);
- Pac[0]:= (Buffer shr 0 ) and $FF;
- Pac[1]:= (Buffer shr 8 ) and $FF;
- Pac[2]:= (Buffer shr 16) and $FF;
- Pac[3]:= (Buffer shr 24) and $FF;
- BufferDest[P] := Pac[0];
- BufferDest[P+1] := Pac[1];
- BufferDest[P+2] := Pac[2];
- BufferDest[P+3] := Pac[3];
- end;
- 1:
- begin
- Key := Key shr 1;
- Buffer := (Buffer - Key);
- Pac[0]:= (Buffer shr 0 ) and $FF;
- Pac[1]:= (Buffer shr 8 ) and $FF;
- Pac[2]:= (Buffer shr 16) and $FF;
- Pac[3]:= (Buffer shr 24) and $FF;
- BufferDest[P] := Pac[0];
- BufferDest[P+1] := Pac[1];
- BufferDest[P+2] := Pac[2];
- BufferDest[P+3] := Pac[3];
- end;
- 2:
- begin
- Key := Key + Key;
- Buffer := (Buffer + Key);
- Pac[0]:= (Buffer shr 0 ) and $FF;
- Pac[1]:= (Buffer shr 8 ) and $FF;
- Pac[2]:= (Buffer shr 16) and $FF;
- Pac[3]:= (Buffer shr 24) and $FF;
- BufferDest[P] := Pac[0];
- BufferDest[P+1] := Pac[1];
- BufferDest[P+2] := Pac[2];
- BufferDest[P+3] := Pac[3];
- end;
- 3:
- begin
- Key := Key shr 2;
- Buffer := (Buffer - Key);
- Pac[0]:= (Buffer shr 0 ) and $FF;
- Pac[1]:= (Buffer shr 8 ) and $FF;
- Pac[2]:= (Buffer shr 16) and $FF;
- Pac[3]:= (Buffer shr 24) and $FF;
- BufferDest[P] := Pac[0];
- BufferDest[P+1] := Pac[1];
- BufferDest[P+2] := Pac[2];
- BufferDest[P+3] := Pac[3];
- end;
- else
- begin
- //Default
- end;
- end;
- Sum2:= Sum2+Buffer;
- Inc(pos,1);
- Inc(i,1);
- P:= P+4;
- end;
- Sum2:= Sum2 and $FF;
- Sum1:= Sum1 and $FF;
- BufferDest[2] := ((Sum2 - Sum1) and $FF);
- end;
- function Decrypt(Src:array of byte; Len:Word): boolean;
- var
- I, P, Pos : integer;
- sum1, sum2, key : Cardinal;
- Pac : array[0..3] of byte;
- intBuffer : LongInt;
- begin
- Sum1 := 0; I := 1;
- Sum2 := 0; P := 4;
- Pos := EncDecKeys[(Src[3] and 255) * 2];
- while (i < (len shr 2)) do begin
- Pac[0] := Src[P];
- Pac[1] := Src[P+1];
- Pac[2] := Src[P+2];
- Pac[3] := Src[P+3];
- Key := EncDecKeys[((pos and $FF) * 2) + 1];
- Move(PAC[0],intBuffer,Sizeof(intBuffer));
- Sum1 := Sum1 + intBuffer;
- case (i and 3) of
- 0:
- begin
- key := key * 4;
- intBuffer := (intBuffer - key);
- Pac[0]:= (intBuffer shr 0 ) and 255;
- Pac[1]:= (intBuffer shr 8 ) and 255;
- Pac[2]:= (intBuffer shr 16) and 255;
- Pac[3]:= (intBuffer shr 24) and 255;
- Src[P] := Pac[0];
- Src[P+1] := Pac[1];
- Src[P+2] := Pac[2];
- Src[P+3] := Pac[3];
- end;
- 1:
- begin
- key := key shr 1;
- intBuffer := (intBuffer + key);
- Pac[0]:= (intBuffer shr 0 ) and 255;
- Pac[1]:= (intBuffer shr 8 ) and 255;
- Pac[2]:= (intBuffer shr 16) and 255;
- Pac[3]:= (intBuffer shr 24) and 255;
- Src[P] := Pac[0];
- Src[P+1] := Pac[1];
- Src[P+2] := Pac[2];
- Src[P+3] := Pac[3];
- end;
- 2:
- begin
- key := (key + key);
- intBuffer := (intBuffer - key);
- Pac[0]:= (intBuffer shr 0 ) and 255;
- Pac[1]:= (intBuffer shr 8 ) and 255;
- Pac[2]:= (intBuffer shr 16) and 255;
- Pac[3]:= (intBuffer shr 24) and 255;
- Src[P] := Pac[0];
- Src[P+1] := Pac[1];
- Src[P+2] := Pac[2];
- Src[P+3] := Pac[3];
- end;
- 3:
- begin
- key := key shr 2;
- intBuffer := (intBuffer + key);
- Pac[0]:= (intBuffer shr 0 ) and 255;
- Pac[1]:= (intBuffer shr 8 ) and 255;
- Pac[2]:= (intBuffer shr 16) and 255;
- Pac[3]:= (intBuffer shr 24) and 255;
- Src[P] := Pac[0];
- Src[P+1] := Pac[1];
- Src[P+2] := Pac[2];
- Src[P+3] := Pac[3];
- end;
- else
- begin
- //default
- end;
- end;
- Sum2:= Sum2 + intBuffer;
- inc(i,1);
- inc(pos,1);
- P:= P+4;
- end;
- sum1:= sum1 and 255;
- sum2:= sum2 and 255;
- Move(Src,BufferDest,sizeof(Src));
- if Src[2] = ((sum1 - sum2) and 255)then
- begin
- Result:= True;
- end
- else
- Result:= False;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement