怎么样用ado控件编程解密access数据库的密码(ado关联的数据源是access)(100分)

  • 主题发起人 主题发起人 wangwsu
  • 开始时间 开始时间
W

wangwsu

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么样用ado控件编程解密access数据库的密码(ado关联的数据源是access)
 
那你要修改Access的文件,你用ADO干什么???
 
to 楼主
穷举吧
 
解密用不着ADO,你如果要解密,下面的代码可以:
function GetAccessPassword(FilePath:string):string;
const
xorString:array[0..12]of byte=
( $86, $FB, $EC, $37,
$5D, $44, $9C, $FA,
$C6, $5E, $28, $E6,$13 );
var
passBuf:array[0..14]of byte;
pass:array[0..14]of char;
resultPass:string;
B:Byte;
F:TFileStream;
i:integer;
begin
F:=TFileStream.Create(FilePath,fmShareDenyNone);
//office 97
try
F.Seek($42,soFromBeginning);
F.Read(passBuf,14);
for I:=0 to 13 do
begin
B := passBuf xor xorString;
pass:=char(B);
end;
pass[sizeof(pass) - 1] := #0;
resultPass:=StrPas(Pass);
finally
F.Free;
end;
result:=resultPass;
end;
*************
[FOR ACCESS97]
predef97:array[0..12] of byte=
($86,$fb,$ec,$37,
$5d,$44,$9c,$fa,
$c6,$5e,$28,$e6,$13);

[FOR ACCESS2000]
predef2k:array [0..20]of byte=
($d3,$ec,$08,$9c,
$93,$28,$46,$8a,
$01,$7b,$a0,$df,
$22,$13,$9a,$b1,
$61,$79,$c7,$7c,$5b);

使用时在程序前声明这个函数,在后面就可以用它得到密码了。

可能你问的是用ADO控件连接带密码的ACCESS数据库的办法吧,那么下面的代码可以:
const{TADOConnection 连接数据库的参数}
ADOLinkString ='Provider=Microsoft.Jet.OLEDB.4.0;'
+ 'Password=%s;' //用户工作组(*.mdw)密码
+ 'User ID=%s;' //用户工作组(*.mdw)用户名Admin
+ 'Data Source=%s;' //数据库文件(*.mdb)位置
+ 'Persist Security Info=True;'
+ 'Mode=ReadWrite;' // 数据库打开方式
+ 'Extended Properties=""' //默认值为空
+ 'Jet OLEDB:System Database=""' //用户工作组文件
+ 'Jet OLEDB:Registry Path=""' //注册路径
+ 'Jet OLEDB:Database Password=%s;' //数据库密码
+ 'Jet OLEDB:Engine Type=1;'
+ 'Jet OLEDB:Database Locking Mode=1;'
+ 'Jet OLEDB:Global Partial Bulk Ops=2;'
+ 'Jet OLEDB:Global Bulk Transactions=1;'
+ 'Jet OLEDB:New Database Password=%s;' //?密码
+ 'Jet OLEDB:Create System Database=False;'
+ 'Jet OLEDB:Encrypt Database=False;'
+ 'Jet OLEDB:Don''t Copy Locale on Compact=False;'
+ 'Jet OLEDB:Compact Without Replica Repair=False;'
+ 'Jet OLEDB:SFP=False';
var
mainDBPath, mdwPassword, mdwUserID, mdbDataSource, mdbUserID,
mdbPassword, mdbNewPassword:string;
begin
mainDBPath :=ExtractFilePath(ParamStr(0));
mdwPassword :='';
mdwUserID :='Admin';
mdbDataSource :=mainDBPath+'data/hongyu.mdb';
mdbUserID :='Admin';
mdbPassword :='123456';
mdbNewPassword :='';
//---这样设置完后再连接到控件的属性上就可以了!---//
with ADOQry_User do
begin {以上是给变量赋值}
Active :=False;
ConnectionString :=Format(ADOLinkString, [mdwPassword, mdwUserId,
mdbDataSource, mdbPassword, mdbNewPassword]);{初始连接参数}
end;
end;
 
Access数据库的密码是跟一个固定的字符串进行异或得到的。
如何 取得这个固定的串,可以通过设置不同的密码,再用文件比较工具、十六进制
文件查看工具(Ultra edit)等分析得到。
楼上的已经找出这个串了,你可以在你的程序里修改$42开始的密码字段来修改Access
的密码。
 
怎么样把密码清空(用ado编程)
 
ADO编程只是用来访问你的MDB数据库。
通过改文件的方法来实现。
 
在对程序编译的时候出现错误
 
接受答案了.
 

Similar threads

后退
顶部