Delphi World - Шифрование файлов, строк и памяти
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Шифрование файлов, строк и памяти

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

unit EZCrypt;

 {modeled by Ben Hochstrasser(bhoc@surfeu.ch) after some code snippet from borland}

 interface

 uses Windows, Classes;

 type
   TWordTriple = Array[0..2] of Word;

 function FileEncrypt(InFile, OutFile: String; Key: TWordTriple): boolean;
 function FileDecrypt(InFile, OutFile: String; Key: TWordTriple): boolean;
 function TextEncrypt(const s: string; Key: TWordTriple): string;
 function TextDecrypt(const s: string; Key: TWordTriple): string;
 function MemoryEncrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;
 function MemoryDecrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;

 implementation

 function MemoryEncrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;
 var
   pIn, pOut: ^byte;
   i : Cardinal;
 begin
   if SrcSize = TargetSize then
   begin
     pIn := Src;
     pOut := Target;
     for i := 1 to SrcSize do
     begin
       pOut^ := pIn^ xor (Key[2] shr 8);
       Key[2] := Byte(pIn^ + Key[2]) * Key[0] + Key[1];
       inc(pIn);
       inc(pOut);
     end;
     Result := True;
   end else
     Result := False;
 end;

 function MemoryDecrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;
 var
   pIn, pOut: ^byte;
   i : Cardinal;
 begin
   if SrcSize = TargetSize then
   begin
     pIn := Src;
     pOut := Target;
     for i := 1 to SrcSize do
     begin
       pOut^ := pIn^ xor (Key[2] shr 8);
       Key[2] := byte(pOut^ + Key[2]) * Key[0] + Key[1];
       inc(pIn);
       inc(pOut);
     end;
     Result := True;
   end else
     Result := False;
 end;

 function TextCrypt(const s: string; Key: TWordTriple; Encrypt: Boolean): string;
 var
   bOK: Boolean;
 begin
   SetLength(Result, Length(s));
   if Encrypt then
     bOK := MemoryEncrypt(PChar(s), Length(s), PChar(Result), Length(Result), Key)
   else
     bOK := MemoryDecrypt(PChar(s), Length(s), PChar(Result), Length(Result), Key);
   if not bOK then Result := '';
 end;

 function FileCrypt(InFile, OutFile: String; Key: TWordTriple; Encrypt: Boolean): boolean;
 var
   MIn, MOut: TMemoryStream;
 begin
   MIn := TMemoryStream.Create;
   MOut := TMemoryStream.Create;
   Try
     MIn.LoadFromFile(InFile);
     MOut.SetSize(MIn.Size);
     if Encrypt then
       Result := MemoryEncrypt(MIn.Memory, MIn.Size, MOut.Memory, MOut.Size, Key)
     else
       Result := MemoryDecrypt(MIn.Memory, MIn.Size, MOut.Memory, MOut.Size, Key);
     MOut.SaveToFile(OutFile);
   finally
     MOut.Free;
     MIn.Free;
   end;
 end;

 function TextEncrypt(const s: string; Key: TWordTriple): string;
 begin
   Result := TextCrypt(s, Key, True);
 end;

 function TextDecrypt(const s: string; Key: TWordTriple): string;
 begin
   Result := TextCrypt(s, Key, False);
 end;

 function FileEncrypt(InFile, OutFile: String; Key: TWordTriple): boolean;
 begin
   Result := FileCrypt(InFile, OutFile, Key, True);
 end;

 function FileDecrypt(InFile, OutFile: String; Key: TWordTriple): boolean;
 begin
   Result := FileCrypt(InFile, OutFile, Key, False);
 end;
Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования