求加密/解密的函数
en(str: String): String;
de(str: String): String;
不管怎么样,功能不要求很强大,只要能把传出的str返回成一个和原来的str看起来不太一样的就行了。
最后两个函数应该是
str := de(en(str));
不过,最好希望能en后的字符串能用0..9a..f表示出来:)
谢谢大家了,只是太忙,自己没有空写了,如果有现成的最好,如果你没有也不必花时间去写。
en(str: String): String;
de(str: String): String;
不管怎么样,功能不要求很强大,只要能把传出的str返回成一个和原来的str看起来不太一样的就行了。
最后两个函数应该是
str := de(en(str));
不过,最好希望能en后的字符串能用0..9a..f表示出来:)
谢谢大家了,只是太忙,自己没有空写了,如果有现成的最好,如果你没有也不必花时间去写。
USES
Classes;
Const
C1=52845;
C2=22719;
function Encrypt(S:String; Key:Word):String;
function Decrypt(S:String; Key:Word):String;
implementation
function Encrypt(S:String; Key:Word):String;
var
i:Integer;
j:Integer;
begin
Result:=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;
s:=Result;
Result:='';
for i:=1 to Length(s) do
begin
j:=Integer(s[i]);
Result:=Result+Char(65+(j div 26))+ char(65+(j mod 26));
end;
end;
function Decrypt(S:String; Key: Word):String;
var
i:Integer;
j:Integer;
begin
result:='';
for i:=1 to (Length(s) div 2) do
begin
j:=(Integer(s[2*i-1])-65)*26;
j:=j+(Integer(s[2*i])-65);
result:=result + Char(j);
end;
s:=Result;
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;
end.
const bEncrypt: boolean): string; //将字符串加密解密,bEncrypt=True表示加密 False表示解密
const
SeedA = 56789; /// 常量,你可以修改
SeedB = 54329; /// 常量,你可以修改
var
i: integer;
ps, pr : ^byte;
begin
if bEncrypt then
s := s+#0;
SetLength(Result, Length(s));
ps := @s[1];
pr := @Result[1];
for i := 1 to length(s) do
begin
pr^ := ps^ xor (Key shr 8);
if bEncrypt then
Key := (pr^ + Key) * SeedA + SeedB
else
Key := (ps^ + Key) * SeedA + SeedB;
pr := pointer(integer(pr) + 1);
ps := pointer(integer(ps) + 1);
end;
end;