{$R *.dfm} //加密函数 Function EncrypKey(Src:String; Key:String):string; var KeyLen,KeyPos,offset :integer; dest :string; SrcPos,SrcAsc,Range :Integer; begin KeyLen:=Length(Key); if KeyLen = 0 then key:='Think Space'; KeyPos:=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 UncrypKey(Src:String; Key:String):string; var KeyLen,KeyPos,offset:integer; dest:string; SrcPos,SrcAsc,TmpSrcAsc:Integer; begin KeyLen:=Length(Key); if KeyLen = 0 then key:='Think Space'; KeyPos:=0; 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;
procedure TForm1.btn1Click(Sender: TObject); begin if Boolean(Length(Trim(edt2.Text))) then edt3.Text := EncrypKey(Trim(edt2.Text), Trim(edt1.Text)); end;
procedure TForm1.btn2Click(Sender: TObject); begin if Boolean(Length(Trim(edt3.Text))) then edt4.Text := UncrypKey(Trim(edt3.Text), Trim(edt1.Text)); end;