unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1
=
class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Edit3: TEdit;
Edit4: TEdit;
Button2: TButton;
procedure
FormShow(Sender: TObject);
procedure
Button1Click(Sender: TObject);
procedure
Button2Click(Sender: TObject);
private
{
Private declarations
}
public
{
Public declarations
}
stringkey : string ;
end
;
var
Form1: TForm1;
implementation
{
$R *.dfm
}
Function EncrypKey (Src:String; 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
;
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
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
;
procedure
TForm1.FormShow(Sender: TObject);
begin
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
stringkey :
=
'
password
'
;
end
;
procedure
TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text :
=
EncrypKey(Edit1.Text,stringkey);
end
;
procedure
TForm1.Button2Click(Sender: TObject);
begin
Edit4.Text :
=
UncrypKey(Edit3.Text,stringkey)
end
;
end
.
转载于:https://www.cnblogs.com/lzming/archive/2008/12/21/1359211.html