Advertisement
Guest User

efefe

a guest
May 31st, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.27 KB | None | 0 0
  1. unit EncDec;
  2.  
  3. interface
  4.  
  5. uses
  6. windows,MMSystem, SysUtils,Functions;
  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. uses
  14. Main,packets;
  15.  
  16. var
  17. EncDecKeys: array[0..511] of Byte =
  18. ($52, $B3, $F7, $20, $34, $FB, $8E, $4C, $21, $2A, $64, $E9, $2F, $89, $E7, $B9, $F1, $F2, $DF, $79, $F9, $40, $09, $FF,
  19. $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,
  20. $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,
  21. $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,
  22. $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,
  23. $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,
  24. $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,
  25. $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,
  26. $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,
  27. $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,
  28. $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,
  29. $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,
  30. $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,
  31. $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,
  32. $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,
  33. $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,
  34. $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,
  35. $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,
  36. $51, $39, $BF, $23, $03, $6B, $8B, $D4, $EC, $F6, $57, $6C);
  37.  
  38.  
  39. procedure Encrypt(Src:array of byte; Len:Word);
  40. var
  41. I, P, Pos : Integer;
  42. Sum1, Sum2, Key, Rand_key : Integer;
  43. Pac : array[0..99] of byte;
  44. Buffer, Time: LongInt;
  45. begin
  46. Sum1:=0; Sum2:=0;
  47. P :=4; I :=1;
  48. Randomize;
  49. rand_key := Random(255);
  50. BufferDest[0]:= WordRec(Len).Lo;
  51. BufferDest[1]:= WordRec(Len).Hi;
  52. BufferDest[3]:= Rand_key;
  53. Src[2]:= 0;
  54. Src[8] := LongInt(TimeGetTime);
  55. Pos:= EncDecKeys[Rand_key * 2];
  56. while (i < (len shr 2)) do begin
  57. Key := EncDecKeys[((pos and $FF) * 2) + 1];
  58. Pac[0] := Src[P];
  59. Pac[1] := Src[P+1];
  60. Pac[2] := Src[P+2];
  61. Pac[3] := Src[P+3];
  62. Move(PAC[0],Buffer,Sizeof(Buffer));
  63. Sum1 := Sum1 + Buffer;
  64. case (i and 3) of
  65. 0:
  66. begin
  67. Key := Key * 4;
  68. Buffer := (Buffer + Key);
  69.  
  70. Pac[0]:= (Buffer shr 0 ) and $FF;
  71. Pac[1]:= (Buffer shr 8 ) and $FF;
  72. Pac[2]:= (Buffer shr 16) and $FF;
  73. Pac[3]:= (Buffer shr 24) and $FF;
  74.  
  75. BufferDest[P] := Pac[0];
  76. BufferDest[P+1] := Pac[1];
  77. BufferDest[P+2] := Pac[2];
  78. BufferDest[P+3] := Pac[3];
  79. end;
  80. 1:
  81. begin
  82. Key := Key shr 1;
  83. Buffer := (Buffer - Key);
  84.  
  85. Pac[0]:= (Buffer shr 0 ) and $FF;
  86. Pac[1]:= (Buffer shr 8 ) and $FF;
  87. Pac[2]:= (Buffer shr 16) and $FF;
  88. Pac[3]:= (Buffer shr 24) and $FF;
  89.  
  90. BufferDest[P] := Pac[0];
  91. BufferDest[P+1] := Pac[1];
  92. BufferDest[P+2] := Pac[2];
  93. BufferDest[P+3] := Pac[3];
  94. end;
  95. 2:
  96. begin
  97. Key := Key + Key;
  98. Buffer := (Buffer + Key);
  99.  
  100. Pac[0]:= (Buffer shr 0 ) and $FF;
  101. Pac[1]:= (Buffer shr 8 ) and $FF;
  102. Pac[2]:= (Buffer shr 16) and $FF;
  103. Pac[3]:= (Buffer shr 24) and $FF;
  104.  
  105. BufferDest[P] := Pac[0];
  106. BufferDest[P+1] := Pac[1];
  107. BufferDest[P+2] := Pac[2];
  108. BufferDest[P+3] := Pac[3];
  109. end;
  110. 3:
  111. begin
  112. Key := Key shr 2;
  113. Buffer := (Buffer - Key);
  114.  
  115. Pac[0]:= (Buffer shr 0 ) and $FF;
  116. Pac[1]:= (Buffer shr 8 ) and $FF;
  117. Pac[2]:= (Buffer shr 16) and $FF;
  118. Pac[3]:= (Buffer shr 24) and $FF;
  119.  
  120. BufferDest[P] := Pac[0];
  121. BufferDest[P+1] := Pac[1];
  122. BufferDest[P+2] := Pac[2];
  123. BufferDest[P+3] := Pac[3];
  124. end;
  125. else
  126. begin
  127. //Default
  128. end;
  129. end;
  130. Sum2:= Sum2+Buffer;
  131. Inc(pos,1);
  132. Inc(i,1);
  133. P:= P+4;
  134. end;
  135. Sum2:= Sum2 and $FF;
  136. Sum1:= Sum1 and $FF;
  137. BufferDest[2] := ((Sum2 - Sum1) and $FF);
  138. end;
  139.  
  140. function Decrypt(Src:array of byte; Len:Word): boolean;
  141. var
  142. I, P, Pos : integer;
  143. sum1, sum2, key : Cardinal;
  144. Pac : array[0..3] of byte;
  145. intBuffer : LongInt;
  146. begin
  147. Sum1 := 0; I := 1;
  148. Sum2 := 0; 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.  
  159. case (i and 3) of
  160. 0:
  161. begin
  162. key := key * 4;
  163. intBuffer := (intBuffer - key);
  164. Pac[0]:= (intBuffer shr 0 ) and 255;
  165. Pac[1]:= (intBuffer shr 8 ) and 255;
  166. Pac[2]:= (intBuffer shr 16) and 255;
  167. Pac[3]:= (intBuffer shr 24) and 255;
  168.  
  169. Src[P] := Pac[0];
  170. Src[P+1] := Pac[1];
  171. Src[P+2] := Pac[2];
  172. Src[P+3] := Pac[3];
  173. end;
  174. 1:
  175. begin
  176. key := key shr 1;
  177. intBuffer := (intBuffer + key);
  178. Pac[0]:= (intBuffer shr 0 ) and 255;
  179. Pac[1]:= (intBuffer shr 8 ) and 255;
  180. Pac[2]:= (intBuffer shr 16) and 255;
  181. Pac[3]:= (intBuffer shr 24) and 255;
  182.  
  183. Src[P] := Pac[0];
  184. Src[P+1] := Pac[1];
  185. Src[P+2] := Pac[2];
  186. Src[P+3] := Pac[3];
  187. end;
  188. 2:
  189. 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. 3:
  204. 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. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement