我用这两个函数加密解密字符串
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类型,如果该成其他类型,加密,解密过程完全错误。请问是什么原因?跟字段类型有关吗?
解决方案 »
- delphi 2007 安装问题,十万火急
- 在fastreport中如何设置字体颜色、粗体、正常及下划线?
- 一个Delphi探讨群!
- 为什么在我的d7 的internet中没有TClientSocket元件和TServerSocket元件,请问怎样添加这两项呢?
- Delphi7 + SQL Server 2000 的问题
- EnumChildWindows 不是枚举所有的子窗口吗?为何我只能得到最后一个?
- 关于父窗体和子窗体的问题,请指教
- 我在function里对richedit操作为什么不可以?
- 如何能退出循环?while not n.eof do begin ....end
- 关于语音识别的问题?请这方面的高高手帮忙
- 怎样能使edit的输入法为系统默认的输入法?
- 点击Dbgrid的标题怎么使其排序?
=============
到最后万不得已只有这样了