我用这两个函数加密解密字符串
function Encrypt(aCryptograph,aKey:string):string; ///加密
var
i,keylen,codelen:integer;
begin
keylen:=Length(akey);
codelen:=Length(aCryptograph);
SetLength(Result, Length(aCryptograph));
for i:=1 to codelen do
begin
Result[i]:=Chr(Ord(aCryptograph[i])+Ord(aKey[(i mod KeyLen)+1]));
end;
end;function decrypt(aCryptograph,aKey:string):string; //解密
var
i,keylen,codelen:integer;
begin
keylen:=Length(akey);
codelen:=Length(aCryptograph);
SetLength(Result, Length(aCryptograph));
for i:=1 to codelen do
begin
Result[i]:=Chr(Ord(aCryptograph[i])-Ord(aKey[(i mod KeyLen)+1]));
end;
end;当用showmessage(decrypt((encrypt('测试字符串'),mikey),mikey));
显示的是原来的字符串,应该说明这个加密,解密函数没问题啊
但是当经过加密后的字符串写入数据库后,再解密读出来,出现这样的问题,当字符串长度为偶数时,完全正常,但当字符串长度为奇数时,解密出的字符串最后一位被截掉。字段是varchar类型,如果该成其他类型,加密,解密过程完全错误。请问是什么原因?跟字段类型有关吗?
function Encrypt(aCryptograph,aKey:string):string; ///加密
var
i,keylen,codelen:integer;
begin
keylen:=Length(akey);
codelen:=Length(aCryptograph);
SetLength(Result, Length(aCryptograph));
for i:=1 to codelen do
begin
Result[i]:=Chr(Ord(aCryptograph[i])+Ord(aKey[(i mod KeyLen)+1]));
end;
end;function decrypt(aCryptograph,aKey:string):string; //解密
var
i,keylen,codelen:integer;
begin
keylen:=Length(akey);
codelen:=Length(aCryptograph);
SetLength(Result, Length(aCryptograph));
for i:=1 to codelen do
begin
Result[i]:=Chr(Ord(aCryptograph[i])-Ord(aKey[(i mod KeyLen)+1]));
end;
end;当用showmessage(decrypt((encrypt('测试字符串'),mikey),mikey));
显示的是原来的字符串,应该说明这个加密,解密函数没问题啊
但是当经过加密后的字符串写入数据库后,再解密读出来,出现这样的问题,当字符串长度为偶数时,完全正常,但当字符串长度为奇数时,解密出的字符串最后一位被截掉。字段是varchar类型,如果该成其他类型,加密,解密过程完全错误。请问是什么原因?跟字段类型有关吗?
=============
到最后万不得已只有这样了