我做的一个简单加密程序,LOCK为加密,UNLOCK为解密
function TMainForm.Lock(Password: String): WideString;
Var
Zid,Wid,Ascid,j,Jm,Rid,Count,Zcount,Wcount:Integer;
Tmp,DestString,Hex:String;
TmpChar:Char;
SourChar,DescChar:Array[0..15] of Char;
begin
Try
Randomize;
Count:=Length(Password);
For j:=1 to Count do
begin
Zid:=Random(2100);
Rid:=Random(8)+1;
Wid:=Random(999);
Zcount:=Length(IntToStr(Zid));
Wcount:=Length(IntToStr(Wid));
Ascid:=ord(Password[j])+Ord(Rid);
Hex:=IntToHex(StrToInt(IntToStr(Zid)+IntToStr(Wid)+IntToStr(Ascid)),16);
if DestString='' then
DestString:=Hex+IntToStr(Zcount)+IntToStr(Wcount)+IntToStr(Rid)
else
DestString:=DestString+Hex+StrPas(DescChar)+IntToStr(Zcount)+IntToStr(Wcount)+IntToStr(Rid);
end;
Result:=DestString;
Except
Result:='';
end;
end;function TMainForm.UnLock(LockPassword: WideString): String;
var
i,j,Bi,Zid,Rid,Wid,DescId,Count,HexInt:Integer;
Tmp,TmpSub,DescString,DescTmp:String;
DescChar:Array[0..15] of char;
begin
Try
Count:=Round(Length(LockPassword)/19);
Bi:=1;
For i:=1 to Count do
begin
Tmp:=Copy(LockPassword,Bi,19);
For j:=0 to 2 do
begin
TmpSub:=Copy(Tmp,Length(Tmp)-j,1);
if j=0 then
Rid:=StrToInt(TmpSub)
else if j=1 then
Wid:=StrToInt(TmpSub)
else if j=2 then
Zid:=StrToInt(TmpSub);
end;
Bi:=Bi+19;
HexInt:=HexToInt(Copy(Tmp,1,16));
DescId:=StrToInt(Copy(IntToStr(HexInt),Zid+Wid+1,Length(IntToStr(HexInt))-Zid-Wid))-Ord(Chr(Rid));
DescTmp:=Chr(DescId);
if DescString='' then
DescString:=DescTmp
else
DescString:=DescString+DescTmp;
end;
Result:=DescString;
Except
Result:='';
end;
end;function TMainForm.HexToInt(SourceHex: String): Integer;
Var
Tmp:String;
i,Count,MoIn,DescIn,HexNum,N:Integer;
begin
Try
i:=0;
MoIn:=0;
DescIn:=0;
Count:=Length(SourceHex);
For i:=Count downto 1 do
begin
Tmp:=Copy(SourceHex,i,1);
HexNum:=HexWordToInt(Tmp);
if HexNum<>0 then
begin
MoIn:=HexNum*Floor(IntPower(16,Count-i));
if DescIn=0 then
DescIn:=MoIn
else
DescIn:=DescIn+MoIn;
end;
end;
Result:=DescIn;
Except
Result:=0;
end;
end;function TMainForm.HexWordToInt(Source: String): Integer;
begin
Try
if UpperCase(Source)='0' then
Result:=0
else if UpperCase(Source)='1' then
Result:=1
else if UpperCase(Source)='2' then
Result:=2
else if UpperCase(Source)='3' then
Result:=3
else if UpperCase(Source)='4' then
Result:=4
else if UpperCase(Source)='5' then
Result:=5
else if UpperCase(Source)='6' then
Result:=6
else if UpperCase(Source)='7' then
Result:=7
else if UpperCase(Source)='8' then
Result:=8
else if UpperCase(Source)='9' then
Result:=9
else if UpperCase(Source)='A' then
Result:=10
else if UpperCase(Source)='B' then
Result:=11
else if UpperCase(Source)='C' then
Result:=12
else if UpperCase(Source)='D' then
Result:=13
else if UpperCase(Source)='E' then
Result:=14
else if UpperCase(Source)='F' then
Result:=15
Except
Result:=17;
end;
end;
function TMainForm.Lock(Password: String): WideString;
Var
Zid,Wid,Ascid,j,Jm,Rid,Count,Zcount,Wcount:Integer;
Tmp,DestString,Hex:String;
TmpChar:Char;
SourChar,DescChar:Array[0..15] of Char;
begin
Try
Randomize;
Count:=Length(Password);
For j:=1 to Count do
begin
Zid:=Random(2100);
Rid:=Random(8)+1;
Wid:=Random(999);
Zcount:=Length(IntToStr(Zid));
Wcount:=Length(IntToStr(Wid));
Ascid:=ord(Password[j])+Ord(Rid);
Hex:=IntToHex(StrToInt(IntToStr(Zid)+IntToStr(Wid)+IntToStr(Ascid)),16);
if DestString='' then
DestString:=Hex+IntToStr(Zcount)+IntToStr(Wcount)+IntToStr(Rid)
else
DestString:=DestString+Hex+StrPas(DescChar)+IntToStr(Zcount)+IntToStr(Wcount)+IntToStr(Rid);
end;
Result:=DestString;
Except
Result:='';
end;
end;function TMainForm.UnLock(LockPassword: WideString): String;
var
i,j,Bi,Zid,Rid,Wid,DescId,Count,HexInt:Integer;
Tmp,TmpSub,DescString,DescTmp:String;
DescChar:Array[0..15] of char;
begin
Try
Count:=Round(Length(LockPassword)/19);
Bi:=1;
For i:=1 to Count do
begin
Tmp:=Copy(LockPassword,Bi,19);
For j:=0 to 2 do
begin
TmpSub:=Copy(Tmp,Length(Tmp)-j,1);
if j=0 then
Rid:=StrToInt(TmpSub)
else if j=1 then
Wid:=StrToInt(TmpSub)
else if j=2 then
Zid:=StrToInt(TmpSub);
end;
Bi:=Bi+19;
HexInt:=HexToInt(Copy(Tmp,1,16));
DescId:=StrToInt(Copy(IntToStr(HexInt),Zid+Wid+1,Length(IntToStr(HexInt))-Zid-Wid))-Ord(Chr(Rid));
DescTmp:=Chr(DescId);
if DescString='' then
DescString:=DescTmp
else
DescString:=DescString+DescTmp;
end;
Result:=DescString;
Except
Result:='';
end;
end;function TMainForm.HexToInt(SourceHex: String): Integer;
Var
Tmp:String;
i,Count,MoIn,DescIn,HexNum,N:Integer;
begin
Try
i:=0;
MoIn:=0;
DescIn:=0;
Count:=Length(SourceHex);
For i:=Count downto 1 do
begin
Tmp:=Copy(SourceHex,i,1);
HexNum:=HexWordToInt(Tmp);
if HexNum<>0 then
begin
MoIn:=HexNum*Floor(IntPower(16,Count-i));
if DescIn=0 then
DescIn:=MoIn
else
DescIn:=DescIn+MoIn;
end;
end;
Result:=DescIn;
Except
Result:=0;
end;
end;function TMainForm.HexWordToInt(Source: String): Integer;
begin
Try
if UpperCase(Source)='0' then
Result:=0
else if UpperCase(Source)='1' then
Result:=1
else if UpperCase(Source)='2' then
Result:=2
else if UpperCase(Source)='3' then
Result:=3
else if UpperCase(Source)='4' then
Result:=4
else if UpperCase(Source)='5' then
Result:=5
else if UpperCase(Source)='6' then
Result:=6
else if UpperCase(Source)='7' then
Result:=7
else if UpperCase(Source)='8' then
Result:=8
else if UpperCase(Source)='9' then
Result:=9
else if UpperCase(Source)='A' then
Result:=10
else if UpperCase(Source)='B' then
Result:=11
else if UpperCase(Source)='C' then
Result:=12
else if UpperCase(Source)='D' then
Result:=13
else if UpperCase(Source)='E' then
Result:=14
else if UpperCase(Source)='F' then
Result:=15
Except
Result:=17;
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货