目的如下: 想将sql脚本文件加密。
具体的想法如下: 本人打算将发布给客户的安装程序中包含sql脚本文件的二进制版本, 一个后台程序负责解释该二进制文件,并翻译成sql脚本的文件,执行该脚本文件,最后删除该脚本文件。请问该方法是否可做到对sql脚本文件加密???? 具体的实现代码该如何写????大家还有另的更好的方法吗??

解决方案 »

  1.   

    我以前做过这个,很笨的办法,说出来不要笑话我 
    把SQL语句每一个字符 XOR 100
    然后统统转化为16进制,然后保存
    读取的时候反向一下就行了
      

  2.   

    1.个人认为完全没有加密脚本的必要。你做好了数据库,他用企业管理器也可以生成这些脚本,加不加密意义不大。2.如果要做的话,方法很多,楼上的方法也不错.不一定只xor 1个数字,可以xor几个数字,比如3个。示范代码如下:function StrToHexStr(const S:string):string;
    //字符串转换成16进制字符串
    var
      I:Integer;
    begin
      for I:=1 to Length(S) do
      begin
        if I=1 then
          Result:=IntToHex(Ord(S[1]),2)
        else Result:=Result+' '+IntToHex(Ord(S[I]),2);
      end;
    end;function HexStrToStr(const S:string):string;
    //16进制字符串转换成字符串
    var
      t:Integer;
      ts:string;
      M,Code:Integer;
    begin
      t:=1;
      Result:='';
      while t<=Length(S) do
      begin
        while not (S[t] in ['0'..'9','A'..'F','a'..'f']) do
          inc(t);
        if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
          ts:='$'+S[t]
        else
          ts:='$'+S[t]+S[t+1];
        Val(ts,M,Code);
        if Code=0 then
          Result:=Result+Chr(M);
        inc(t,2);
      end;
    end;function XorStr(const S:string):string;
    //异或字符串
    const
      aXorChar:array [0..2] of Byte =(3,9,15);  //可以多写几个 ,这里用3个做示范
    var
      I:Integer;
    begin
      SetLength(Result,Length(S));
      for I:=1 to Length(S) do
      begin
        Result[I]:=Char(Ord(S[I]) Xor aXorChar[I mod (High(aXorChar)+1)]);
      end;
    end;function SetPassStr(const S:string):string;
    //字符串加密
    begin
      Result:=StrToHexStr(XorStr(S));
    end;function GetPassStr(const S:string):string;
    //字符串解密
    begin
      Result:=XorStr(HexStrToStr(S));
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Memo2.Text:=SetPassStr(Memo1.Text);//测试加密
      Memo3.Text:=GetPassStr(Memo2.Text);//测试解密
      if Memo1.Text=Memo3.Text then
        ShowMessage('测试正确');
      //如果Memo3和Memo1的内容一样,则测试正确。
    end;
      

  3.   

    funtion jiami(str:String):String;
    var
    i,l:integer;
    k,t:byte;
    begin
    result:='';
    l:=length(str);
    for i:=1 to l do
      begin
      t:=ord(str[i]);
      k:=(t shl 4) or (t shr 4); //每个字符的高低位进行交换,再交换一次还还原了!
      result:=result+chr(k);
      end;
    end;加密和解密都是这一个函数~~~前两天刚想出来,觉得好玩,就贴出来,代码较少,但不知道实不实用!
      

  4.   

    请问:如果存储过程经过加密(with encrypt),使用企业管理器能看到源脚本吗???
      

  5.   

    请问:如果存储过程经过加密(with encrypt),使用企业管理器能看到源脚本吗???
      

  6.   

    也是可以的,网上解密存储过程的存储过程多的是,以前我也是用with encrypt加密的。