function Decrypt(Src: string; Key: string): string;
var
KeyLen, KeyPos, Offset, SrcPos, SrcAsc, TmpSrcAsc: Integer;
Dest: string;
begin
KeyLen := Length(Key);
if KeyLen = 0 then
Key := cPasswordKey;
KeyPos := 0;
Offset := StrToInt('$' + Copy(Src, 1, 2));
SrcPos := 3;
while SrcPos < Length(Src) do
begin
SrcAsc := StrToInt('$' + Copy(Src, SrcPos, 2));
if KeyPos < KeyLen then
KeyPos := KeyPos + 1
else
KeyPos := 1;
TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
if TmpSrcAsc <= Offset then
TmpSrcAsc := 255 + TmpSrcAsc - Offset
else
TmpSrcAsc := TmpSrcAsc - Offset;
Dest := Dest + Chr(TmpSrcAsc);
Offset := SrcAsc;
SrcPos := SrcPos + 2;
end;
Result := Dest;
end;
function Encrypt(Src: string; Key: string): string;
var
KeyLen, KeyPos, Offset, SrcPos, SrcAsc: Integer;
Dest: string;
begin
KeyLen := Length(Key);
if KeyLen = 0 then
Key := cPasswordKey;
KeyPos := 0;
Randomize;
Offset := Random(256);
Dest := Format('%1.2x', [Offset]);
for SrcPos := 1 to Length(Src) do
begin
SrcAsc := (Ord(Src[SrcPos]) + Offset) mod 255;
if KeyPos < KeyLen then
KeyPos:= KeyPos + 1
else
KeyPos:=1;
SrcAsc := SrcAsc xor Ord(Key[KeyPos]);
Dest := Dest + Format('%1.2x', [SrcAsc]);
Offset := SrcAsc;
end;
Result := Dest;
end;