home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 May / Chip_2002-05_cd1.bin / zkuste / delphi / kompon / d5 / CAKDIR.ZIP / EncryptIt.pas < prev    next >
Pascal/Delphi Source File  |  2001-02-25  |  2KB  |  91 lines

  1. unit EncryptIt;
  2.  
  3. interface
  4. USES
  5.     Classes;
  6.  
  7. function Encrypt(const S: String; Key,C1,C2: Word): String;
  8. function Decrypt(const S: String; Key,C1,C2: Word): String;
  9. procedure EncryptFile(INFName, OutFName : String; Key,C1,C2 : Word);
  10. procedure DecryptFile(INFName, OutFName : String; Key,C1,C2 : Word);
  11.  
  12. implementation
  13.  
  14. function Encrypt(const S: String; Key,C1,C2: Word): String;
  15. var
  16.    I: Integer;
  17. begin
  18.   Result := S;
  19.   for I := 1 to Length(S) do
  20.       begin
  21.            Result[I] := char(byte(S[I]) xor (Key shr 8));
  22.            Key := (byte(Result[I]) + Key) * C1 + C2;
  23.       end;
  24.   end;
  25.  
  26. function Decrypt(const S: String; Key,C1,C2: Word): String;
  27. var
  28.    I: Integer;
  29. begin
  30.   Result := S;
  31.   for I := 1 to Length(S) do
  32.       begin
  33.            Result[I] := char(byte(S[I]) xor (Key shr 8));
  34.            Key := (byte(S[I]) + Key) * C1 + C2;
  35.       end;
  36.   end;
  37.  
  38.  
  39. procedure EncryptFile(INFName, OutFName : String; Key,C1,C2 : Word);
  40. VAR
  41.    MS, SS : TMemoryStream;
  42.    X : Integer;
  43.    C : Byte;
  44. begin
  45. MS := TMemoryStream.Create;
  46. SS := TMemoryStream.Create;
  47.     TRY
  48.        MS.LoadFromFile(INFName);
  49.        MS.Position := 0;
  50.        FOR X := 0 TO MS.Size - 1 DO
  51.              begin
  52.                   MS.Read(C, 1);
  53.                   C := (C xor (Key shr 8));
  54.                   Key := (C + Key) * C1 + C2;
  55.                   SS.Write(C,1);
  56.              end;
  57.        SS.SaveToFile(OutFName);
  58.     FINALLY
  59.            SS.Free;
  60.            MS.Free;
  61.     end;
  62. end;
  63.  
  64. procedure DecryptFile(INFName, OutFName : String; Key,C1,C2 : Word);
  65. VAR
  66.    MS, SS : TMemoryStream;
  67.    X : Integer;
  68.    C, O : Byte;
  69. begin
  70. MS := TMemoryStream.Create;
  71. SS := TMemoryStream.Create;
  72.     TRY
  73.        MS.LoadFromFile(INFName);
  74.        MS.Position := 0;
  75.        FOR X := 0 TO MS.Size - 1 DO
  76.              begin
  77.                   MS.Read(C, 1);
  78.                   O := C;
  79.                   C := (C xor (Key shr 8));
  80.                   Key := (O + Key) * C1 + C2;
  81.                   SS.Write(C,1);
  82.              end;
  83.        SS.SaveToFile(OutFName);
  84.     FINALLY
  85.            SS.Free;
  86.            MS.Free;
  87.     end;
  88. end;
  89.  
  90. end.
  91.