25. februar 2002 - 15:58
				#7
						
		 
		
			function Encrypt(Text: string; Key1, Key2, Key3, Key4: Integer): string;
var
  BufS, Hexa, Hexa1, Hexa2: string;
  BufI, BufI2, Sc, Sl, Num1, Num2, Num3, Num4, Res1, Res2, Res3, Res4: Integer; 
begin 
  Sl   := Length(Text); 
  Sc   := 0; 
  BufS := '';
  if (Key1 in [1..120]) and (Key2 in [1..120]) and (Key3 in [1..120]) and 
    (Key4 in [1..120]) then 
  begin 
    BufI  := Key1 * Key4; 
    BufI2 := Key3 * Key2; 
    BufI  := BufI - BufI2; 
    if BufI = 0 then 
    begin 
      Result := ''; 
      Exit; 
    end; 
  end
  else 
  begin 
    Result := ''; 
    Exit; 
  end; 
  repeat 
    Inc(Sc); 
    if Sc =  Sl then Num1 := 0
    else
      Num1 := Ord(Text[Sc]);
    Inc(Sc);
    if Sc = Sl then Num2 := 0
    else
      Num2 := Ord(Text[Sc]);
    Inc(Sc);
    if Sc = Sl then Num3 := 0
    else
      Num3 := Ord(Text[Sc]);
    Inc(sc);
    if Sc = Sl then Num4 := 0
    else
      Num4 := Ord(Text[Sc]);
    Res1 := Num1 * Key1;
    BufI := Num2 * Key3; 
    Res1 := Res1 + BufI; 
    Res2 := Num1 * Key2; 
    BufI := Num2 * Key4; 
    Res2 := Res2 + BufI;
    Res3 := Num3 * Key1; 
    BufI := Num4 * Key3; 
    Res3 := Res3 + BufI; 
    Res4 := Num3 * Key2; 
    BufI := Num4 * Key4;
    Res4 := Res4 + BufI; 
    for BufI := 1 to 4 do 
    begin 
      case BufI of 
        1: Hexa := IntToHex(Res1, 4);
        2: Hexa := IntToHex(Res2, 4); 
        3: Hexa := IntToHex(Res3, 4); 
        4: Hexa := IntToHex(Res4, 4); 
      end; 
      Hexa1 := '$' + Hexa[1] + Hexa[2];
      Hexa2 := '$' + Hexa[3] + Hexa[4]; 
      if (Hexa1 = '$00') and (Hexa2 = '$00') then 
      begin 
        Hexa1 := '$FF'; 
        Hexa2 := '$FF';
      end; 
      if Hexa1 = '$00' then Hexa1 := '$FE'; 
      if Hexa2 = '$00' then 
      begin 
        Hexa2 := Hexa1;
        Hexa1 := '$FD'; 
      end; 
      BufS := BufS + Chr(StrToInt(Hexa1)) + Chr(StrToInt(Hexa2)); 
    end; 
  until Sc = Sl;
  Result := BufS; 
end;
function Decrypt(Text: string; Key1, Key2, Key3, Key4: Integer): string; 
var 
  BufS, Hexa1, Hexa2: string;
  BufI, BufI2, Divzr, Sc, Sl, Num1, Num2, Num3, Num4, Res1, Res2, Res3, Res4: Integer; 
begin 
  Sl   := Length(Text); 
  Sc   := 0; 
  BufS := '';
  if (Key1 in [1..120]) and (Key2 in [1..120]) and (Key3 in [1..120]) and 
    (Key4 in [1..120]) then 
  begin 
    Divzr := Key1 * Key4; 
    BufI2 := Key3 * Key2;
    Divzr := Divzr - BufI2; 
    if Divzr = 0 then 
    begin 
      Result := ''; 
      Exit;
    end; 
  end 
  else 
  begin 
    Result := '';
    Exit; 
  end; 
  repeat 
    for BufI := 1 to 4 do 
    begin
      Inc(Sc); 
      Hexa1 := IntToHex(Ord(Text[Sc]), 2); 
      Inc(Sc); 
      Hexa2 := IntToHex(Ord(Text[Sc]), 2); 
      if Hexa1 = 'FF' then
      begin
        Hexa1 := '00';
        Hexa2 := '00'; 
      end; 
      if Hexa1 = 'FE' then Hexa1 := '00';
      if Hexa1 = 'FD' then 
      begin 
        Hexa1 := Hexa2; 
        Hexa2 := '00'; 
      end;
      case BufI of 
        1: Res1 := StrToInt('$' + Hexa1 + Hexa2); 
        2: Res2 := StrToInt('$' + Hexa1 + Hexa2); 
        3: Res3 := StrToInt('$' + Hexa1 + Hexa2); 
        4: Res4 := StrToInt('$' + Hexa1 + Hexa2);
      end; 
    end; 
    BufI  := Res1 * Key4; 
    BufI2 := Res2 * Key3; 
    Num1  := BufI - BufI2;
    Num1  := Num1 div Divzr; 
    BufI  := Res2 * Key1; 
    BufI2 := Res1 * Key2; 
    Num2  := BufI - BufI2; 
    Num2  := Num2 div Divzr;
    BufI  := Res3 * Key4; 
    BufI2 := Res4 * Key3; 
    Num3  := BufI - BufI2; 
    Num3  := Num3 div Divzr; 
    BufI  := Res4 * Key1;
    BufI2 := Res3 * Key2; 
    Num4  := BufI - BufI2; 
    Num4  := Num4 div Divzr; 
    BufS  := BufS + Chr(Num1) + Chr(Num2) + Chr(Num3) + Chr(Num4); 
  until Sc = Sl;
  Result := BufS;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
decrypt('weert',11034,53430,33460,1232305);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
 encrypt('weert',11034,53430,33460,1232305);
end;
Stoney