资源描述:
《防止access2000密码被破译的方法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、防止Access2000密码被破译的方法>>教育资源库 如果你过分信任Access2000数据库的密码保护,你可能会因此而蒙受损失。这是因为Access2000的数据库级密码并不安全,相反它很脆弱,甚至下面这段非常小的程序就可以攻破它: 程序一(VB6):Access2000密码破译PrivateSubmand1_Click()ConstOffset=H43文件偏移Access数据库从此处开始存放加密密码DimbEmpty(1To2)AsByte,bPass(1To2)AsByteDimiAsInteger,Passpt
2、y_DB.mdbForBinaryAs#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))'将密码解密EndI
3、fNextClose1,2MsgBoxPasspty_DB.mdb)。该数据库的创建日期必须与被密码保护的数据库(Pass_Protected_DB.mdb)相一致。换句话说,Access2000仅仅是使用数据库创建日期来加密用户密码。 应注意的是:上面的创建日期只是操作系统级的,也就是TIMEp;H40000000PrivateConstOPEN_EXISTING=3PrivateConstFILE_SHARE_READ=H1PrivateConstFILE_SHARE_E,_ByValNullPAsLong,ByValNul
4、lP2AsLong)AsLongPrivateDeclareFunctionSystemTimeToFileTimeLibkernel32_(lpSystemTimeAsSYSTEMTIME,lpFileTimeAsFILETIME)AsLongPrivateDeclareFunctionCreateFileLibkernel32Alias&quo12下一页>>>>这篇文章来自..,。t;CreateFileA_(ByVallpFileNameAsString,ByValdplateFileAsLong)AsLongPrivate
5、DeclareFunctionCloseHandleLibkernel32(ByValhObjectAsLong)_AsLongPrivateDeclareFunctionLocalFileTimeToFileTimeLibkernel32_(lpLocalFileTimeAsFILETIME,lpFileTimeAsFILETIME)AsLongPrivateSubmand1_Click()DimYearAsInteger,MonthAsInteger,DayAsIntegerDimHourAsInteger,MinuteAsI
6、nteger,SecondAsIntegerDimTimeStampAsVariant,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,
7、TimeStamp)EndSubFunctionModifyFileStamp(FilenameAsString,TimeStampAsVariant)AsIntegerDimXAsLong,HandleAsLong,System_TimeAsSYSTEMTIMEDimFile_TimeAsFILETIME,Local_TimeAsFILETIMESystem_Time.eStamp):System_Time.eStamp)System_Time.eStamp)System_Time.eStamp)-1System_Time.eS
8、tamp):System_Time.eStamp)System_Time.TimeToFileTime(System_Time,Local_Time)X=LocalFileTimeToFileTime(Local_Time,File_Time)