用Delphi加密Access文件头

下面就用Delphi作个简单的加密解程序:  
   
用到的加密解函数如下:  
   
  const  
  titlestr:array[0..15]   of   byte=  
  ($00,$01,$00,$00,$53,$74,$61,$6E,$64,$61,$72,$64,$20,$4A,$65,$74)   ;   /*   /对应MDB文件的前16个字节   */    
titlestr2:array[0..15]   of   byte=  
($48,$4A,$00,$58,$55,$43,$48,$41,$4E,$47,$59,$4F,$55,$00,$20,$20)   ;//更改后的MDB文件的前16个字节,自己随便写吧,比如写上自己公司的简称或自已的名  
produce   EncrypMDB(filename:string);   //用titlestr2内容替换MDB前16个字节,以便实现加密的作用  
var   F:TFileStream;  
begin  
if   not   fileExists(filename)   then   exit;  
F:=TFileStream.create(filename,fmopenwrite);  
try  
F.seek($00,soFromBeginning);  
F.Write(titlestr2,16);  
finally  
F.free;  
end;  
end;  
produce   uncrypMDB(filename:string);     /*     还原MDB前16个字节     */      
var   F:TFileStream;  
begin  
if   not   fileExists(filename)   then   exit;  
F:=TFileStream.create(filename,fmopenwrite);  
try  
F.seek($00,soFromBeginning);  
F.Write(titlestr,16);  
finally  
F.free;  
end;  
end;  
   
  我们知道打开ACCESS数据库后会出现一个锁定文件(.ldb文件),因为我们自己也要使用数据库,所以必须在使用时还原数据库。  
  如果还原后没有进行加密的话,用户同样可以复制MDB文件,然后用ACCESS或其它工具打开它,所以应该在数据打开前后都处于加密状态才能保证数据的安全。  
  用Delphi采用ADO连接数据库用以下方法可以实现:  
   
//还原数据,以便自已使用数据库  
copyfile(pchar(APP_path+'/data/account.db'),pchar(app_path+'data/temp.db'),false);    
//app_path表示程序的当前目录,account.db是个更改了扩展名的MDB文件  
uncrypMDB(App_path+'data/temp.db');  
copyfile(pchar(App_path+'data/temp.db'),pchar(APP_path+'/data/account.db'),false);  
adoconn.connectionstring:='provider=Microsoft.Jet.OLEDB.4.0;Data   Source='+App_path+'data/account.db;Persist   Security   Info=false';   //adocon是个TADOConnection组件  
try  
adoconn.connected:=true;  
except  
MessageBox(handle,'打开数据库出现致命的错误!!!','错误',MB_OK+MB_IC);  
end;  
//打开后马上对其加密  
copyfile(pchar(APP_path+'/data/account.db'),pchar(app_path+'data/temp.db'),false);    
//app_path表示程序的当前目录,account.db是个更改了扩展名的MDB文件  
EncrypMDB(App_path+'data/temp.db');  
copyfile(pchar(App_path+'data/temp.db'),pchar(APP_path+'/data/account.db'),false);  
deletefile(App_path+'data/temp.db');  
  上面使用了两次临时文件,是因为数据库打开后再对MDB进行直接的写入会出现问题,而且你无法去确定多少个用户打开了程序。  
  整个程序共用一个TADOConnection,只在打开数据库连接的时候还原MDB文件,其它时间MDB文件一直都处于加密状态!用户复制了MDB文件一般很难知道它是什么!  
   
打开数据库后会有一个.ldb文件,类型会出现ACCESS等字样,如果你不想让人看出是什么的话就修改注册表吧,如:  
reg:=TRegistry.Create;  
try  
reg.RootKey:=HKEY_CLASSES_ROOT;  
reg.OpenKey('.ldb');  
reg.WriteString('','tempfile');  
finally  
reg.closekey;  
reg.free;  
end;  
这样用户看到的文件类型是tempfile

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值