我用这两个函数加密解密字符串
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类型,如果该成其他类型,加密,解密过程完全错误。请问是什么原因?跟字段类型有关吗?

解决方案 »

  1.   

    如果不存在数据库中,奇数存在问题吗???
      

  2.   

    你把取出的字符串先去掉空格试试呢??
      

  3.   

    先把取出的字符串去掉空格也不行不存在数据库中,就不存在奇数偶数等问题
      

  4.   

    那你就先判断字符串长度,将奇数字符串变成偶数的,然后再加密、解密。
      

  5.   

    那你就先判断字符串长度,将奇数字符串变成偶数的,然后再加密、解密。
    =============
    到最后万不得已只有这样了