目的如下: 想将sql脚本文件加密。
具体的想法如下: 本人打算将发布给客户的安装程序中包含sql脚本文件的二进制版本, 一个后台程序负责解释该二进制文件,并翻译成sql脚本的文件,执行该脚本文件,最后删除该脚本文件。请问该方法是否可做到对sql脚本文件加密???? 具体的实现代码该如何写????大家还有另的更好的方法吗??
具体的想法如下: 本人打算将发布给客户的安装程序中包含sql脚本文件的二进制版本, 一个后台程序负责解释该二进制文件,并翻译成sql脚本的文件,执行该脚本文件,最后删除该脚本文件。请问该方法是否可做到对sql脚本文件加密???? 具体的实现代码该如何写????大家还有另的更好的方法吗??
把SQL语句每一个字符 XOR 100
然后统统转化为16进制,然后保存
读取的时候反向一下就行了
//字符串转换成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;
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;加密和解密都是这一个函数~~~前两天刚想出来,觉得好玩,就贴出来,代码较少,但不知道实不实用!