W wangwsu Unregistered / Unconfirmed GUEST, unregistred user! 2002-12-09 #1 怎么样用ado控件编程解密access数据库的密码(ado关联的数据源是access)
L louhong Unregistered / Unconfirmed GUEST, unregistred user! 2002-12-09 #4 解密用不着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 OLEDBatabase Password=%s;' //数据库密码 + 'Jet OLEDB:Engine Type=1;' + 'Jet OLEDBatabase 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 OLEDBon''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;
解密用不着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 OLEDBatabase Password=%s;' //数据库密码 + 'Jet OLEDB:Engine Type=1;' + 'Jet OLEDBatabase 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 OLEDBon''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;
Y yeath Unregistered / Unconfirmed GUEST, unregistred user! 2002-12-09 #5 Access数据库的密码是跟一个固定的字符串进行异或得到的。 如何 取得这个固定的串,可以通过设置不同的密码,再用文件比较工具、十六进制 文件查看工具(Ultra edit)等分析得到。 楼上的已经找出这个串了,你可以在你的程序里修改$42开始的密码字段来修改Access 的密码。
Access数据库的密码是跟一个固定的字符串进行异或得到的。 如何 取得这个固定的串,可以通过设置不同的密码,再用文件比较工具、十六进制 文件查看工具(Ultra edit)等分析得到。 楼上的已经找出这个串了,你可以在你的程序里修改$42开始的密码字段来修改Access 的密码。
Y yeath Unregistered / Unconfirmed GUEST, unregistred user! 2002-12-09 #7 ADO编程只是用来访问你的MDB数据库。 通过改文件的方法来实现。