请问各位大侠:可不可以直接对Variant类型数据进行加密。如果可以可以有哪些算法,最好可以直接提供源码,CB或者DELPHI都可以!
  
  另外,能否对数据集DataSet进行加密呢?可以的话又有哪些算法呢??(从服务器到客户端的数据有一部分是数据集DataSet)
谢谢!!!

解决方案 »

  1.   

    把Variant变成string在加密function Encrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;
    var
      I : integer;
    begin
      Result := '';
      for I := 1 to Length(InString) do
      begin
        Result := Result + CHAR(Byte(InString[I]) xor (StartKey shr 8));
        StartKey := (Byte(Result[I]) + StartKey) * MultKey + AddKey;
      end;
    end;
    {*******************************************************
     * Standard Decryption algorithm - Copied from Borland *
     *******************************************************}
    function Decrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;
    var
      I : integer;
    begin
      Result := '';
      for I := 1 to Length(InString) do
      begin
        Result := Result + CHAR(Byte(InString[I]) xor (StartKey shr 8));
        StartKey := (Byte(InString[I]) + StartKey) * MultKey + AddKey;
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       temp:=encrypt(memo1.Text,strtoint(edit1.Text),strtoint(edit2.Text),strtoint(edit3.Text));
       memo2.Text:=temp;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
       memo2.Text:=decrypt(temp,strtoint(edit1.Text),strtoint(edit2.Text),strtoint(edit3.Text));
    end;
      

  2.   

    楼上的算法好像有问题?
    你的E..与D..一样,就是分别调用E..与D..各一次后,
    出来的明文与先前的InString不符合?{*******************************************************
     * Standard Decryption algorithm - Copied from Borland *
     *******************************************************}从Borland的哪个单元Copy的?想知道?望告知。
      

  3.   

    Variant是一种比较特殊的类型,其后面跟有一些元素,可以尝试对这些元素进行加密。
    实在不行的话可以将Variant转化为一个字节流,然后对这些字节流进行加密procedure g_VariantTo(v: oleVariant; var ARec; Size: integer);
    var
      i: integer;
      p: PByteArray;
      prec: Pointer;
    begin
      prec := @ARec;
      p := VarArrayLock(v);
      for i:=0 to Size-1 do
        (PByteArray(prec))^[i] := p^[i];
      VarArrayUnLock(v);
      {对字节流加密}
    ....
    end;