Advertisement
thebad_cb

Enc Dec AIka Delphi

Jan 18th, 2015
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 7.34 KB | None | 0 0
  1. unit EncDec;
  2.  
  3. interface
  4.  
  5. uses
  6.   def, SysUtils;
  7.  
  8.  Procedure Encrypt(Src:array of byte; Len:Word);
  9.  Function  Decrypt(Src:array of byte; Len:Word): boolean;
  10.  
  11. implementation
  12.  
  13. var
  14. {$REGION 'ENCDEC KEYS'}
  15.   EncDecKeys: array[0..511] of Byte =
  16.       ($52, $B3, $F7, $20, $34, $FB, $8E, $4C, $21, $2A, $64, $E9, $2F, $89, $E7, $B9, $F1, $F2, $DF, $79, $F9, $40, $09, $FF,
  17.             $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,
  18.             $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,
  19.             $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,
  20.             $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,
  21.             $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,
  22.             $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,
  23.             $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,
  24.             $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,
  25.             $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,
  26.             $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,
  27.             $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,
  28.             $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,
  29.             $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,
  30.             $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,
  31.             $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,
  32.             $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,
  33.             $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,
  34.             $51, $39, $BF, $23, $03, $6B, $8B, $D4, $EC, $F6, $57, $6C);
  35. {$ENDREGION}
  36.  
  37. procedure  Encrypt(Src:array of byte; Len:Word);
  38.  var
  39.  I, P, Pos,Time : Integer;
  40.  sum1, sum2, key, Rand_key : Cardinal;
  41.  Pac : array[0..99] of byte;
  42.  Buffer : LongInt;
  43. begin
  44.    sum1:=0; sum2:=0;
  45.    P   :=4; I   :=1;
  46.    Randomize;
  47.    rand_key := Random(255);
  48.    BufferDest[0]:= WordRec(Len).Lo;
  49.    BufferDest[1]:= WordRec(Len).Hi;
  50.    BufferDest[3]:= Rand_key;
  51.    BufferDest[2]:= 0;
  52.    //BufferDest[8]:= TimeGetTime;
  53.    Pos:=EncDecKeys[rand_key * 2];
  54.    while (i < (len shr 2)) do begin
  55.   pac[0] := src[p];
  56.   pac[1] := src[p+1];
  57.   pac[2] := src[p+2];
  58.   pac[3] := src[p+3];
  59.   Key := EncDecKeys[((pos and $FF) * 2) + 1];
  60.   Move(PAC[0],Buffer,Sizeof(Buffer));
  61.   Sum1 := Sum1 + Buffer;
  62.     case (i and 3) of
  63.     0:
  64.     begin
  65.   key := key * 4;
  66.   Buffer := ( Buffer + key);
  67.  
  68.   Pac[0]:=  (Buffer shr  0  )  and  $FF;
  69.   Pac[1]:=  (Buffer shr  8  )  and  $FF;
  70.   Pac[2]:=  (Buffer shr  16 )  and  $FF;
  71.   Pac[3]:=  (Buffer shr  24 )  and  $FF;
  72.  
  73.   BufferDest[p]   := pac [0];
  74.   BufferDest[p+1] := pac [1];
  75.   BufferDest[p+2] := pac [2];
  76.   BufferDest[p+3] := pac [3];
  77.     end;
  78.     1:
  79.     begin
  80.   key := key shr 1;
  81.   Buffer := ( Buffer - key);
  82.  
  83.   Pac[0]:=  (Buffer shr  0  )  and  $FF;
  84.   Pac[1]:=  (Buffer shr  8  )  and  $FF;
  85.   Pac[2]:=  (Buffer shr  16 )  and  $FF;
  86.   Pac[3]:=  (Buffer shr  24 )  and  $FF;
  87.  
  88.   BufferDest[p]   := pac [0];
  89.   BufferDest[p+1] := pac [1];
  90.   BufferDest[p+2] := pac [2];
  91.   BufferDest[p+3] := pac [3];
  92.     end;
  93.     2:
  94.     begin
  95.   key := key + key;
  96.   Buffer := ( Buffer + key);
  97.  
  98.   Pac[0]:=  (Buffer shr  0  )  and  $FF;
  99.   Pac[1]:=  (Buffer shr  8  )  and  $FF;
  100.   Pac[2]:=  (Buffer shr  16 )  and  $FF;
  101.   Pac[3]:=  (Buffer shr  24 )  and  $FF;
  102.  
  103.   BufferDest[p]   := pac [0];
  104.   BufferDest[p+1] := pac [1];
  105.   BufferDest[p+2] := pac [2];
  106.   BufferDest[p+3] := pac [3];
  107.     end;
  108.     3:
  109.     begin
  110.   key := key shr 2;
  111.   Buffer := ( Buffer - key);
  112.  
  113.   Pac[0]:=  (Buffer shr  0  )  and  $FF;
  114.   Pac[1]:=  (Buffer shr  8  )  and  $FF;
  115.   Pac[2]:=  (Buffer shr  16 )  and  $FF;
  116.   Pac[3]:=  (Buffer shr  24 )  and  $FF;
  117.  
  118.   BufferDest[p]   := pac [0];
  119.   BufferDest[p+1] := pac [1];
  120.   BufferDest[p+2] := pac [2];
  121.   BufferDest[p+3] := pac [3];
  122.     end;
  123.     else
  124.     begin
  125.   //Default
  126.     end;
  127.     end;
  128.     sum2:= sum2+Buffer;
  129.     inc(pos,1);
  130.     inc(i,1);
  131.     P:= P+4;
  132.    end;
  133.    sum2:= sum2 and $FF;
  134.    sum1:= sum1 and $FF;
  135.    BufferDest[2] := ((sum2 - sum1) and $FF);
  136. end;
  137.  
  138. function  Decrypt(Src:array of byte; Len:Word): boolean;
  139.  var
  140.   I, P, Pos : integer;
  141.  sum1, sum2, key : Cardinal;
  142.  Pac : array[0..3] of byte;
  143.  intBuffer : LongInt;
  144.  begin
  145.  sum1 := 0;
  146.  sum2 := 0;
  147.  I := 1;
  148.  P := 4;
  149.  Pos := EncDecKeys[(Src[3] and 255) * 2];
  150.  while (i < (len shr 2)) do begin
  151.  pac[0] := src[p];
  152.  pac[1] := src[p+1];
  153.  pac[2] := src[p+2];
  154.  pac[3] := src[p+3];
  155.  Key := EncDecKeys[((pos and $FF) * 2) + 1];
  156.  Move(PAC[0],intBuffer,Sizeof(intBuffer));
  157.  Sum1 := Sum1 + intBuffer;
  158.  case (i and 3) of
  159.  
  160.  0: begin
  161.  key := key * 4;
  162.  intBuffer := (intBuffer - key);
  163.  Pac[0]:= (intBuffer shr 0 ) and 255;
  164.  Pac[1]:= (intBuffer shr 8 ) and 255;
  165.  Pac[2]:= (intBuffer shr 16 ) and 255;
  166.  Pac[3]:= (intBuffer shr 24 ) and 255;
  167.  
  168.  Src[p]   := pac[0];
  169.  Src[p+1] := pac [1];
  170.  Src[p+2] := pac [2];
  171.  Src[p+3] := pac [3];
  172.  end;
  173.  
  174.  1: begin
  175.  key := key shr 1;
  176.  intBuffer := (intBuffer + key);
  177.  Pac[0]:= (intBuffer shr 0 ) and 255;
  178.  Pac[1]:= (intBuffer shr 8 ) and 255;
  179.  Pac[2]:= (intBuffer shr 16 ) and 255;
  180.  Pac[3]:= (intBuffer shr 24 ) and 255;
  181.  
  182.  Src[p]   := pac[0];
  183.  Src[p+1] := pac [1];
  184.  Src[p+2] := pac [2];
  185.  Src[p+3] := pac [3];
  186.  
  187.  end;
  188.  
  189.  2: begin
  190.  key := (key + key);
  191.  intBuffer := (intBuffer - key);
  192.  
  193.  Pac[0]:= (intBuffer shr 0 ) and 255;
  194.  Pac[1]:= (intBuffer shr 8 ) and 255;
  195.  Pac[2]:= (intBuffer shr 16 ) and 255;
  196.  Pac[3]:= (intBuffer shr 24 ) and 255;
  197.  
  198.  Src[p]   := pac[0];
  199.  Src[p+1] := pac [1];
  200.  Src[p+2] := pac [2];
  201.  Src[p+3] := pac [3];
  202.  end;
  203.  
  204.  3: begin
  205.  key := key shr 2;
  206.  intBuffer := (intBuffer + key);
  207.  
  208.  Pac[0]:= (intBuffer shr 0 ) and 255;
  209.  Pac[1]:= (intBuffer shr 8 ) and 255;
  210.  Pac[2]:= (intBuffer shr 16 ) and 255;
  211.  Pac[3]:= (intBuffer shr 24 ) and 255;
  212.  
  213.  Src[p]   := pac[0];
  214.  Src[p+1] := pac [1];
  215.  Src[p+2] := pac [2];
  216.  Src[p+3] := pac [3];
  217.  end;
  218.  else
  219.   begin
  220.  //default
  221.  end;
  222.  end;
  223.  Sum2:= Sum2 + intBuffer;
  224.  inc(i,1);
  225.  inc(pos,1);
  226.  P:= P+4;
  227.  end;
  228.  sum1:= sum1 and 255;
  229.  sum2:= sum2 and 255;
  230.  Move(Src,BufferDest,sizeof(Src));
  231.  if Src[2] = ((sum1 - sum2) and 255)then
  232.  begin
  233.  result:=true;
  234.  end
  235.  else
  236.  result:=false
  237. end;
  238.  
  239.  
  240. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement