unit EnctyptClientData;

interface

uses SysUtils;

type
  TScEnryptClient = class
  public
    function EncryptData(const AIP: string; AUser, AAction: Integer): string;
    function DeEncryptData(const Value: string): string;
  end;

implementation

uses Math;

{ TScEnryptClient }

function TScEnryptClient.DeEncryptData(const Value: string): string;
begin
  Result := Copy(Value, 4, Length(Value) - 5);
end;

function TScEnryptClient.EncryptData(const AIP: string; AUser,
  AAction: Integer): string;
var
  I, iLen: Integer;
  rav, slen: string;
begin
  Randomize;
  SetLength(Result , 27);
  rav := IntToStr(Random(10));
  Result[1] := rav[1];
  rav := IntToStr(Length(AIP));
  if Length(rav) = 1 then
  begin
    Result[2] := '0';
    Result[3] := rav[1];
  end
  else
  begin
    Result[2] := rav[1];
    Result[3] := rav[2];
  end;
  rav := IntToStr(Random(10));
  Result[4] := rav[1];

  for I := 1 to Length(AIP) do
  begin
    Result[I + 4] := AIP[I];
  end;
  
  if Length(AIP) < 21 then
  begin
    iLen := Length(AIP);
    while 16 - iLen > 0 do
    begin
      rav := IntToStr(Random(10));
      Result[iLen + 5] := rav[1];
      Inc(iLen);
    end;
  end;
  rav := IntToStr(AUser);
  slen := IntToStr(Length(rav));
  if Length(rav) = 1 then
  begin
    Result[21] := '0';
    Result[22] := rav[1];
    Result[26] := '0';
    Result[27] := slen[1];
  end
  else
  begin
    Result[21] := rav[1];
    Result[22] := rav[2];
    Result[26] := slen[1];
    Result[27] := slen[2];
  end;
 { Result[21] := rav[1];
  rav := IntToStr(Random(10));
  Result[22] := rav[1];  }
  rav := IntToStr(AAction);
  Result[23] := rav[1];
  rav := IntToStr(Random(10));
  Result[24] := rav[1];
  rav := IntToStr(Random(10));
  Result[25] := rav[1];
end;

end.
