我现在想写一个验证。 TSendData = RECORD
          U_name :string[100];
          U_psw : string[100] ;
      END;
通过indy tcpclient发送 TSenddata到服务端。但是D2010找不到好的加密算法。只有一个AES可以用。但是只能加密字符串。这样会很麻烦。有没有好的加密方法。或者加密函数。能直接把senddata加密的?高分求教。

解决方案 »

  1.   

    结构体可以当成文件  进行流 加密
    流加密可以参考
    http://www.yesky.com/77/1781577_1.shtml
      

  2.   

    如果你确定的2010下的AES可以使用的话, 请使用下面的方法加密var
      plain: TSendData;
      strPlain : RawByteString;
    begin
      setlength(strPlain, sizeof(plain));
      move(plain, strPlain[1], sizeof(plain));
      aes(plain, key)
     ......
    end
      

  3.   

    AES可以用。但是只能加密字符串?
    一般都是先有加密二进制、流,才有加密字符串的二进制record转为字符串很简单:
    s:string;
    r:Trecord;setlength(s,sizeof(r));
    move(@r,s[1],sizeof(r));
      

  4.   


    var strPlain : RawByteString;
        U:TSendData ;
    begin
        setlength(strPlain, sizeof(u));
        move(u,strPlain[1],sizeof(u));
        EncryptString(strPlain, HostKey);
    是这样吗?前面的例子编不过去。我改了一下可以编了。不知道对不对。然后我如何把它还原成原来的senddata呢? 这个不是太懂。希望多指点下
      

  5.   

       我试了。可以。但是加密以后解密有问题。不知道是不是我的写法有问题。请帮忙看下。
       
    var strPlain,test1,test2 : RawByteString;
        U:TSendData ;
        b:TSendData;
    begin
        u.U_name:= 'aaaaaaa';
        u.U_psw:= '123123' ;
        setlength(strPlain, sizeof(u));
        move(u,strPlain[1],sizeof(u));
        test1:=EncryptString(strPlain, '123');
        test2:=DecryptString(test1,'123');
        move(test2[1],b,sizeof(b));
        showmessage(b.U_name);
        showmessage(b.U_psw);
      

  6.   

       u_name是对的。  U_psw解密出来的就是乱码了。
      

  7.   

    不是, 最关键你得测试下AES在2010下是否是正确的, 再做判断. 一般来说以前那些封装加密函数的人只是为了方便使用才使用了string类型, 严格的来说这样是不对的, 到了2010下你最好直接改成RawByteString, 把aes里面的string全部替换成RawByteString先凑合用着, 严格的来说加密只是针对内存区域块的加密, 封装可以使用无类型参数, 加上个Size就可以了, 但是这样传参的时候容易传错.
      

  8.   

       是正确的。因为我改成panchar 了。字符串我写了很长很长加密也没有问题。
      

  9.   

       我把aes全部改了也不行。还是一样。_name是对的。 U_psw解密出来的就是乱码了
      

  10.   

    你就把record当做流,进行流加密就是了,怎么非得盯着字符串呢
      

  11.   

       主要是我找到的ace加密上面只有加密字符串的功能。我汗。我用的是2010.
      

  12.   

      我的2010的aes 有流的加密和解密函数。我应该怎么去把record转成流加密。然后解密再转回来呢。请帮忙告诉下。
    function EncryptStream(Src: TStream; Key: AnsiString;
      var Dest: TStream; KeyBit: TKeyBit = kb128): Boolean;
    function DecryptStream(Src: TStream; Key: AnsiString;
      var Dest: TStream; KeyBit: TKeyBit = kb128): Boolean;