程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Access數據庫 >> 關於Access數據庫 >> 防止Access2000口令被破譯地辦法

防止Access2000口令被破譯地辦法

編輯:關於Access數據庫

假如你過分信任Access2000數據庫的密碼保護,你可能會因此而蒙受損失。這是因為Access2000的數據庫級密碼並不安全,相反它很脆弱,甚至下面這段非常小的程序就可以攻破它:
 
程序一(VB6):
Access2000密碼破譯
PrivateSubCommand1_Click()
ConstOffset=&H43文件偏移地址:
Access數據庫從此處開始存放加密密碼
DimbEmpty(1To2)AsByte,bPass(1To2)AsByte
DimiAsInteger,PassWordAsString
打開一個空
數據庫作為參照
Open"D:VB6_TestMDB_PassWordNew_Empty_DB.mdb"ForBinaryAs#1
打開被密碼保護的
數據庫
Open"D:VB6_TestMDB_PassWordPass_Protected_DB.mdb"ForBinaryAs#2
Seek#1,Offset
Seek#2,Offset
Fori=1To20'
Access2000數據庫密碼最長答應20位
Get#1,,bEmpty'其中每位密碼占兩個字節
Get#2,,bPass'一個漢字也僅是一位密碼,占兩個字節
If(bEmpty(1)XorbPass(1))<>0Then
Password=PassWord Chr(bEmpty(1)XorbPass(1))'將密碼解密
EndIf
Next
Close1,2
MsgBox"Password:" PassWord'顯示密碼
EndSub

一、深入分析

上述程序成功的要害是使用了一個空數據庫(New_Empty_DB.mdb)。該數據庫的創建日期必須與被密碼保護的數據庫(Pass_Protected_DB.mdb)相一致。換句話說,Access2000僅僅是使用“數據庫創建日期”來加密用戶密碼。

應注重的是:上面的“創建日期”只是操作系統級的,也就是Windows記錄在文件夾目錄裡的信息(根據文件名的長短,每個文件在目錄裡占用至少32個字節,包括:文件名、屬性、文件大小、首蔟號、創建時間、修改時間和訪問時間等)。

Access2000在數據庫中也記錄了該數據庫的“創建日期”。加密數據庫密碼的正是數據庫內部記錄的這個“創建日期”。該日期只有在數據庫被成功打開後才能看到。但在一般情況下,操作系統級的以及數據庫內保存的“創建日期”是完全一樣的,因此這為破譯者提供了方便。

上述程序中還有一點需要說明:為簡明起見,解密密碼時僅處理了雙字節的首字節,因此它僅對非漢字密碼有效。若要解密漢字密碼,須對雙字節均做處理。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved