用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 edit,memo中禁用ctrl+v

Delphi xe5 android 程序退出功能

Delphi10.3模拟读取百度网页,并读取相关头部信息

Delphi 执行一个外部程序,当外部程序结束后言主程序立即响应

Delphi fmx 绘制非常精确的 时分秒针

Delphi 如何解析网址?

Delphi-idhttp-utf-8编码乱码解决

Delphi 去掉文件只读属性

Delphi fmx getapppath 获取app路径

Delphi ado的事务处理例子

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



打赏

取消

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

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

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

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

评论

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

    正在狠努力加载,请稍候...