最近才下载 了2010感觉挺不错的.以前的老程序.想用2010编译下.发现好多地方都不兼容.INDY9变成INDY10..改了半天.发现我以前用的DES算法都不能正常加密和解密的.加解密都是乱码.那位大大帮我解决下.不胜感谢.

解决方案 »

  1.   

    最大的变化是String默认由AnsiString改成了WideString
    把String替换成AnsiString
      

  2.   

       我试过了.不光string改成ansistring里面的char 我也改成了ansichar
    还是不行哦.虽然可以加密.加出来是乱码.而且还不能解密
      

  3.   

    是的,char也是两字节了,包括pchar,所以你以前涉及到这些的东西估计都要改了
      

  4.   

    还是查一下编码问题,看一下长度和内存DUMP
      

  5.   

    难道Des算法不是你自己写的?
    如果不是那就难办了.
      

  6.   

    下面是我改的一个原来在D7上用的加解密算法,支持D2010,不过按2个字节算的,所以加密结果会比D7下的长:
    function TEncdDecdObj.Encrypt(const Key, SrcStr: string): string;
    var
      KeyLen :Integer;
      KeyPos :Integer;
      offset :Integer;
      keyStr,dest :string;
      SrcPos :Integer;
      SrcAsc :Integer;
      Range :Integer;
    begin
      if Key='' then
        keyStr:=EncryptDefaultKey
      else keyStr:=Key;
      KeyLen:=Length(keyStr);
      KeyPos:=0;
      Range:=$FFFF+1;
      Randomize;
      offset:=Random(Range);
      dest:=format('%1.4x',[offset]);
      for SrcPos := 1 to Length(SrcStr) do
      begin
        SrcAsc:=(Ord(SrcStr[SrcPos]) + offset) MOD $FFFF;
        if KeyPos < KeyLen then KeyPos:= KeyPos + 1 else KeyPos:=1;
        SrcAsc:= SrcAsc xor Ord(keyStr[KeyPos]);
        dest:=dest + format('%1.4x',[SrcAsc]);
        offset:=SrcAsc;
      end;
      Result:=Dest;
    end;function TEncdDecdObj.Decrypt(const Key, SrcStr: string): string;
    var
      KeyLen :Integer;
      KeyPos :Integer;
      offset :Integer;
      keyStr,dest :string;
      SrcPos :Integer;
      SrcAsc :Integer;
      TmpSrcAsc :Integer;
    begin
      if SrcStr='' then exit;
      if Key='' then
        keyStr:=EncryptDefaultKey
      else keyStr:=Key;
      KeyLen:=Length(keyStr);
      KeyPos:=0;
      offset:=StrToInt('$'+ copy(SrcStr,1,4));
      SrcPos:=5;
      if copy(SrcStr,SrcPos,2)<>'' then
      begin
        repeat
          SrcAsc:=StrToInt('$'+ copy(SrcStr,SrcPos,4));
          if KeyPos < KeyLen Then KeyPos := KeyPos + 1 else KeyPos := 1;
          TmpSrcAsc := SrcAsc xor Ord(keyStr[KeyPos]);
          if TmpSrcAsc <= offset then
            TmpSrcAsc := $FFFF + TmpSrcAsc - offset
          else
            TmpSrcAsc := TmpSrcAsc - offset;
          dest := dest + chr(TmpSrcAsc);
          offset:=srcAsc;
          SrcPos:=SrcPos + 4;
        until SrcPos >= Length(SrcStr);
        Result:=Dest;
      end else Result:='';
    end;
      

  7.   

       谢谢8楼.后来我再仔细检查了一下.原来是有些CHAR没改过来.现在已经改好了.谢谢大家的帮助.