怎样更好地加密ACCESS数据库?

seav 2005-05-19 12:47:56
我以前使用最简单的数据库加密,现在用一个小小工具就可以破解,有谁可以告之一个好的加密方法吗?
请详细说明一下或者可否提供一个例子,谢谢了.
...全文
447 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
knife_s 2005-05-30
  • 打赏
  • 举报
回复
to seav
在ACCESS的工具----安全----设置安全机制向导中,一步步按向导完成即可,



to ffwin
http://nj.onlinedown.net/soft/37898.htm
你可以下载这个软件尝试破解他的数据库,这个应该是用工作组文件进行加密的
ffwin 2005-05-30
  • 打赏
  • 举报
回复
没用的,建议不要在这个上面花太多的时间,如果解不开,找我
seav 2005-05-30
  • 打赏
  • 举报
回复
knife_s(人生长恨水长东),怎样设置工作组?
tec715 2005-05-30
  • 打赏
  • 举报
回复
工作组加密也是不安全的,用一个解密软件很容易解密的,比如老的金碟软件的数据库,最保险的是对数据加密,但是对于数据库的使用很不方便
tfeiy 2005-05-30
  • 打赏
  • 举报
回复
xuzhenhu()

高手...
qq153788616 2005-05-30
  • 打赏
  • 举报
回复
后缀名改.ASP
knife_s 2005-05-29
  • 打赏
  • 举报
回复
其实如果了解ACCESS, 就知道用一种方式加密的是绝对其它人无法打开的:

先看这个连接字符串

ConnStr:='Provider=Microsoft.Jet.OLEDB.4.0;'
+ 'User ID=tomato;Password=tomato;Data Source='//注意这里
+ DBPath
+ 'Persist Security Info=False;'
+ 'Jet OLEDB:System database="' + ExtractFilePath(Application.ExeName) + 'SONG.mdw";'//注意这里
+ 'Jet OLEDB:Registry Path="";'
+ 'Jet OLEDB:Database Password="tomato";'
+ 'Jet OLEDB:Engine Type=5;'
+ 'Jet OLEDB:Database Locking Mode=1;'
+ 'Jet OLEDB:Global Partial Bulk Ops=2;'
+ 'Jet OLEDB:Global Bulk Transactions=1;'
+ 'Jet OLEDB:New Database Password="";'
+ 'Jet OLEDB:Create System Database=False;'
+ 'Jet OLEDB:Encrypt Database=False;'
+ 'Jet OLEDB:Compact Without Replica Repair=True;'
+ 'Jet OLEDB:SFP=False';
上面就是结合了工作组文件来进行加密的,

基本上无法破解,

而生成工作组文件可以在ACCESS的工具---安全----设置安全机器向导中一步步来

你会发现,ACCESS很坚固
崔作非 2005-05-23
  • 打赏
  • 举报
回复
有些软件是直接Crack的,根本不需要读密码,只是把密码所在的字节清空而已,即取消密码。再说它只对针对Access 2000,对于其它版本的就不一定好用了。独占方式不适合于网络上的应用。
wenjianyao 2005-05-23
  • 打赏
  • 举报
回复
破解的可能性比较大
最好是别考虑给数据库加密
而是给重要的数据加密
aking222 2005-05-21
  • 打赏
  • 举报
回复
仁兄对ACCESS研究得透彻
xuzhenhu 2005-05-21
  • 打赏
  • 举报
回复
下面的过程不会提示不认识数据库,只是会提示密码错误,任何读取密码的软件都不能读出正确的密码

{-----------------------------------------------------------------------------
Procedure: LockupFile
Author: ysai
Date: 2003-6-25
Arguments: FileName:string;Lock:boolean=true
Result: integer
-----------------------------------------------------------------------------}
function LockupFile(FileName:string;Lock:boolean=true):integer;
//加密、解密数据库,针对 Access 2000
var
f:File;
bf:array[0..63] of Byte;
i:integer;
const
fpos=64;
flen=64;
//下面改为自己的密钥,我是用随机生成的,请改为自己的密钥
pw:array[0..63] of byte=
($97,$A0,$0C,$A1,$06,$59,$0A,$6D,
$91,$33,$51,$57,$D4,$A3,$94,$16,
$3D,$B2,$C7,$A0,$7C,$A3,$30,$EE,
$34,$D6,$C1,$FF,$F7,$EC,$A5,$1F,
$71,$2C,$19,$69,$E3,$25,$7D,$8B,
$D3,$95,$AB,$C9,$02,$8A,$87,$44,
$9F,$C7,$D7,$7D,$BA,$69,$56,$15,
$FB,$CB,$03,$D6,$94,$A6,$BF,$F7);
begin
result:=-1;
if not FileExists(FileName) then exit;
try
AssignFile(f,Filename);
Reset(f,1);
Seek(f,fpos);
BlockRead(f,bf,flen);
//下面的代码是判断是否被加密,你可以用二进制编辑器打开MDB文件对比,
//我是用第64,65字节作为是否加密的标记,未加密与版本相关,加密后与版本和密钥相关
if lock and (bf[0]=$2B) and (bf[1]=$EE)
or not lock and (bf[0]=$BC) and (bf[1]=$4E)
or not ((bf[0]=$2B) and (bf[1]=$EE))
and not ((bf[0]=$BC) and (bf[1]=$4E)) then
begin
result:=0;
exit;
end;
for i:=0 to flen-1 do
bf[i]:=bf[i] xor pw[i mod 64];
Seek(f,fpos);
BlockWrite(f,bf,flen);
result:=1;
finally
CloseFile(f);
end;
end;

以ADO为例,把ADOConnection.Mode设为cmShareExclusive就可以以独占方式打开数据库,
任何除你程序之外的程序都不能访问数据库文件,复制也不行,但是用户用任务管理器强行
结束你的程序可以让你没加密就退出,如果要更安全,就要写另一个程序和你的主程序来互
相监视,监视程序如果能访问数据库则马上给它加密.主程序也要保证监视程序的运行.
xuzhenhu 2005-05-21
  • 打赏
  • 举报
回复
delphi实现ACCESS加密
Microsoft的ACCESS数据库,是我们常用的桌面数据之一,大多中小企业的数据库管理系统都可以采用它,但其安全性一直令人担犹,试想,一套财务管理系统,用户直接打开数据库去更改数据,后果会如何?有些系统对ACCESS数据库可能只是更改扩展名,或加个密码,众所周知,破解ACCESS密码的方法和工具网上多的是!所以这样的加密一样令人担犹,下面介绍一个简单的方法,实现ACCESS数据的加密,供大家参考。
  
用UltraEdit打开MDB文件可以看到,文件前16个字节的内容:
  00 01 00 00 53 74 61 6E 64 61 72 64 20 4A 65 74   

现在随便更改几个,再用ACCESS打开,发现出现不同识别的文件格式错误,因为ACCESS前面保存的信息都是一些MDB文件的定义和口令,如果更改这些内容,别人就很难看出这个数据库的格式,无法打开它了,而且这样不会对数据库的内容作更改,不会破坏原有的数据。
下面就用Delphi作个简单的加密解程序,用到的加密解函数如下:  

const
//对应MDB文件的前16个字节   
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);

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连接数据库用以下方法可以实现:

//还原数据,以便自已使用数据库
//app_path表示程序的当前目录,account.db是个更改了扩展名的MDB文件
copyfile(pchar(APP_path+'\data\account.db'),pchar(app_path+'data\temp.db'),false);
uncrypMDB(App_path+'data\temp.db');
copyfile(pchar(App_path+'data\temp.db'),pchar(APP_path+'\data\account.db'),false);

//adocon是个TADOConnection组件
adoconn.connectionstring:='provider=Microsoft.Jet.OLEDB.4.0;Data
Source='+App_path+'data\account.db;Persist Security Info=false';
try
adoconn.connected:=true;
except
MessageBox(handle,'打开数据库出现致命的错误!!!','错误',MB_OK+MB_ICONERROR);
end;

//打开后马上对其加密
//app_path表示程序的当前目录,account.db是个更改了扩展名的MDB文件
copyfile(pchar(APP_path+'\data\account.db'),pchar(app_path+'data\temp.db'),false);
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
注:以上所用数据库都是指ACCESS 2000,其它版本的我想应该大同小异,自己动手试试吧。
qrlvls 2005-05-21
  • 打赏
  • 举报
回复
回复人: qrlvls(空 气) ( ) 信誉:100 2005-05-20 04:39:00 得分: 0


把你的数据加密后使用二进制字段方式存储


___________________________________________________
呵呵,那不知道你的数据库操作会麻烦到什么程度,恐怕够你受的,是不是考虑给access加个壳?换一个自己的后缀,通常只有你自己的程序能打开,而别人打不开
----------------------------------------------------------
呵呵,我的一个应用中也有类似的处理,实际上只是通过一个现成的zlib库将数据进行压缩而已,所有操作并不完全靠,自己完成
DebugXP 2005-05-20
  • 打赏
  • 举报
回复
这样做
http://www.microsoft.com/china/MSDN/library/archives/library/DNAcc2k2/html/odc_acsecurity.asp
zhp97 2005-05-20
  • 打赏
  • 举报
回复
回复人: qrlvls(空 气) ( ) 信誉:100 2005-05-20 04:39:00 得分: 0


把你的数据加密后使用二进制字段方式存储


___________________________________________________
呵呵,那不知道你的数据库操作会麻烦到什么程度,恐怕够你受的,是不是考虑给access加个壳?换一个自己的后缀,通常只有你自己的程序能打开,而别人打不开
laiqinghe 2005-05-20
  • 打赏
  • 举报
回复
TO zxw111111(秋风):

哦????呵呵 谢谢
qrlvls 2005-05-20
  • 打赏
  • 举报
回复
把你的数据加密后使用二进制字段方式存储
seav 2005-05-19
  • 打赏
  • 举报
回复
uP
widow 2005-05-19
  • 打赏
  • 举报
回复
有一种方法,就是用vba程序写一段代码,即使你打开石磨也看不到,但解决的不是很彻底。
seav 2005-05-19
  • 打赏
  • 举报
回复
不是的,我以前看过有一个方法,加密度极高.
好像是用什么用户组之类的东西,现在不知往哪找了.
加载更多回复(5)

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧