资源描述:
《防止access 2000密码被破译的方法--》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、防止Access2000密码被破译的方法>> 如果你过分信任Access2000数据库的密码保护,你可能会因此而蒙受损失。这是因为Access2000的数据库级密码并不安全,相反它很脆弱,甚至下面这段非常小的程序就可以攻破它: 程序一(VB6):Access2000密码破译PrivateSubmand1_Click()ConstOffset=H43文件偏移Access数据库从此处开始存放加密密码DimbEmpty(1To2)AsByte,bPass(1To2)AsByteDimiAsInteger,Passpty_DB.md
2、bForBinaryAs#1打开被密码保护的数据库OpenD:VB6_TestMDB_PassdbForBinaryAs#2Seek#1,OffsetSeek#2,OffsetFori=1To20'Access2000数据库密码最长允许20位Get#1,,bEmpty'其中每位密码占两个字节Get#2,,bPass'一个汉字也仅是一位密码,占两个字节If(bEmpty(1)XorbPass(1))<>0ThenPasspty(1)XorbPass(1))'将密码解密EndIfNextClos
3、e1,2MsgBoxPasspty_DB.mdb)。该数据库的创建日期必须与被密码保护的数据库(Pass_Protected_DB.mdb)相一致。换句话说,Access2000仅仅是使用数据库创建日期来加密用户密码。 应注意的是:上面的创建日期只是操作系统级的,也就是TIMEp;H40000000PrivateConstOPEN_EXISTING=3PrivateConstFILE_SHARE_READ=H1PrivateConstFILE_SHARE_E,_ByValNullPAsLong,ByValNullP2AsLong)A
4、sLongPrivateDeclareFunctionSystemTimeToFileTimeLibkernel32_(lpSystemTimeAsSYSTEMTIME,lpFileTimeAsFILETIME)AsLongPrivateDeclareFunctionCreateFileLibkernel32Alias&quo12下一页>>>>这篇文章来自..,。t;CreateFileA_(ByVallpFileNameAsString,ByValdplateFileAsLong)AsLongPrivateDeclareFuncti
5、onCloseHandleLibkernel32(ByValhObjectAsLong)_AsLongPrivateDeclareFunctionLocalFileTimeToFileTimeLibkernel32_(lpLocalFileTimeAsFILETIME,lpFileTimeAsFILETIME)AsLongPrivateSubmand1_Click()DimYearAsInteger,MonthAsInteger,DayAsIntegerDimHourAsInteger,MinuteAsInteger,SecondAs
6、IntegerDimTimeStampAsVariant,FilenameAsString,XAsIntegerYear=2001:Month=3:Day=13'准备设定的创建日期Hour=12:Minute=0:Second=26TimeStamp=DateSerial(Year,Month,Day)+TimeSerial(Hour,Minute,Second)Filename=D:VB6_TestMDB_Passdb'目标文件名X=ModifyFileStamp(Filename,TimeStamp)EndSubF
7、unctionModifyFileStamp(FilenameAsString,TimeStampAsVariant)AsIntegerDimXAsLong,HandleAsLong,System_TimeAsSYSTEMTIMEDimFile_TimeAsFILETIME,Local_TimeAsFILETIMESystem_Time.eStamp):System_Time.eStamp)System_Time.eStamp)System_Time.eStamp)-1System_Time.eStamp):System_Time.e
8、Stamp)System_Time.TimeToFileTime(System_Time,Local_Time)X=LocalFileTimeToFileTime(Local_Time,File_Time)'转换