引用别人的
function Myencrypt(Src, Key: String): string;
var
idx :integer;
KeyLen :Integer;
KeyPos :Integer;
offset :Integer;
dest :string;
SrcPos :Integer;
SrcAsc :Integer;
Range :Integer;begin
KeyLen:=Length(Key);
if KeyLen = 0 then key:='Think Space';
KeyPos:=0;
SrcPos:=0;
SrcAsc:=0;
Range:=256;Randomize;
offset:=Random(Range);
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;function Mydecrypt(Src, Key: String): string;
var
idx :integer;
KeyLen :Integer;
KeyPos :Integer;
offset :Integer;
dest :string;
SrcPos :Integer;
SrcAsc :Integer;
TmpSrcAsc :Integer;
Range :Integer;begin
KeyLen:=Length(Key);
if KeyLen = 0 then key:='Think Space';
KeyPos:=0;
SrcPos:=0;
SrcAsc:=0;
Range:=256;
offset:=StrToInt('$'+ copy(src,1,2));
SrcPos:=3;
repeat
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;
until SrcPos >= Length(Src);
Result:=Dest;
end;

解决方案 »

  1.   

    function EncStr(const s: string): string;
    const
      C1 = 52845;
      C2 = 22719;
    var
      i: integer;
      Key: word;
    begin
      Key := 12345;
      SetLength(Result, length(s));
      for i := 1 to length(s) do
      begin
        Result[i] := char(byte(s[i]) xor (Key shr 8));
        Key := (byte(Result[i]) + Key) * C1 + C2;
      end;
    end;function DecStr(const s: string): string;
    const
      C1 = 52845;
      C2 = 22719;
    var
      i: integer;
      Key: word;
    begin
      Key := 12345;
      SetLength(Result, length(s));
      for i := 1 to length(s) do
      begin
        Result[i] := char(byte(s[i]) xor (Key shr 8));
        Key := (byte(s[i]) + Key) * C1 + C2;
      end;
    end;