一个使用秘钥加/解密字符串的delphi函数
版权声明:本文为博主原创文章,未经博主允许不得转载。
需要用到这个函数的时候,网上搜查了一下,资源倒不少,可是都是由于版本或者其他的原因,均不凑效;
只得自己动手进行了一番改造,终于搞掂!
本程序在XE2无错运行,请放心使用:)
//字符串秘钥加解密函数 (keystr 秘钥)
function Crypt3(s,keystr:String; const bEncrypt: boolean = True): String;
//字符串转为16进制表达字符
function MyStrToHex(AStr: string): string;
var
I ,Len: Integer;
s:char;
begin
len:=length(AStr);
Result:='';
for i:=1 to len do
begin
s:=AStr[i];
Result:=Result + IntToHex(Ord(s),2); //将字符串转化为16进制字符串,
end;
end;
var
i, L: DWord;
b, k : word;
mm: Integer;
key: array of word;
begin
Result := '';
L:=Length(S);
if L<1 then
exit;
//变换处理秘钥字符串
keystr:= MyStrToHex(keystr);
mm := (length(keystr) div 2)-1;
if mm<0 then
begin
exit;
end;
setlength(key,mm+1);
for i := 0 to mm do
begin
key[i] := StrToInt('$'+copy(keystr,i*2+1,2));
end;
k:=0;
if bEncrypt then
//加密
for i := 1 to L do
begin
b := word(S[i]) xor ord(key[k]);
Result := Result + IntToHex(b,4);
inc(k);
if k>mm then
k:=0;
end
else
begin
//还原
k:=0;
i:=0;
while i<L div 4 do
begin
Result := Result + chr( StrToInt('$'+copy(s,i*4+1,4)) xor key[k]);
inc(i);
inc(k);
if k>mm then
k:=0;
end;
end;
end;