用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

相关阅读 >>

Delphi 10.4中新增功能:新的vcl tedgebrowser组件

Delphi xe7中使用json

Delphi实现双击左ctrl键调用记事本

Delphi xe string与tstringbuilder的关系

Delphi 遍历所有目录和子目录下的文件名(可按后缀名遍历)

Delphi guid单元

Delphi windows 编程[3] - 学习窗体生成的过程三

Delphi 程序嵌入桌面效果的实现

Delphi写一个utf8编码格式的文本文件

Delphi 用updateresource修改exe文件图标(已修正)

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...