国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Access > 正文

怎樣防止Access 2000密碼被破譯

2024-09-07 19:03:52
字體:
來源:轉載
供稿:網友

如果你過分信任 Access 2000數據庫的密碼保護,你可能會因此而蒙受損失。這是因為Access 2000的數據庫級密碼并不安全,相反它很脆弱,甚至下面這段非常小的程序就可以攻破它:

程序一(VB6):Access 2000密碼破譯

以下為引用的內容:
Private Sub Command1_Click()
Const Offset = &H43 文件偏移地址:Access數據庫從此處開始存放加密密碼
Dim bEmpty(1 To 2) As Byte, bPass(1 To 2) As Byte
Dim i As Integer, Password As String
打開一個空數據庫作為參照
Open "D:VB6_TestMDB_PasswordNew_Empty_DB.mdb" For Binary As #1
打開被密碼保護的數據庫
Open "D:VB6_TestMDB_PasswordPass_Protected_DB.mdb" For Binary As #2
Seek #1, Offset
Seek #2, Offset
For i = 1 To 20 ' Access 2000 數據庫密碼最長允許20位
Get #1, , bEmpty ' 其中每位密碼占兩個字節
Get #2, , bPass ' 一個漢字也僅是一位密碼,占兩個字節
If (bEmpty(1) Xor bPass(1)) <> 0 Then
Password = Password Chr(bEmpty(1) Xor bPass(1)) ' 將密碼解密
End If
Next
Close 1, 2
MsgBox "Password:" Password ' 顯示密碼
End Sub

一、深入分析

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

應注意的是:上面的“創建日期”只是操作系統級的,也就是 Windows記錄在文件夾目錄里的信息(根據文件名的長短,每個文件在目錄里占用至少32個字節,包括:文件名、屬性、文件大小、首蔟號、創建時間、修改時間和訪問時間等)。Access 2000 在數據庫中也記錄了該數據庫的“創建日期”。加密數據庫密碼的正是數據庫內部記錄的這個“創建日期”。該日期只有在數據庫被成功打開后才能看到。但在一般情況下,操作系統級的以及數據庫內保存的“創建日期”是完全一樣的,因此這為破譯者提供了方便。
上述程序中還有一點需要說明:為簡明起見,解密密碼時僅處理了雙字節的首字節,因此它僅對非漢字密碼有效。若要解密漢字密碼,須對雙字節均做處理。
二、防范措施
1、隱藏“創建日期”
從上面的分析可以看出,既然“創建日期”是破譯的關鍵,那么我們應“對癥下藥”,將真實的“創建日期”隱藏起來。
第一步,創建數據庫時,使用一個“不可思議的、別人不易猜測”的日期。做法為:修改 Windows系統日期,例如改為2026年05月15日,創建數據庫后再將系統日期改回。這個“不可思議”的日期即為該數據庫的真實“創建日期”。
第二步,修改操作系統級的“創建日期”。上述第一步完成后,該數據庫在操作系統級的創建日期也是2026年05月15日,必須加以修改,以達到隱藏真實創建日期的目的。修改操作系統級的“創建日期”可以由下面的程序二完成。

主站蜘蛛池模板: 柏乡县| 大冶市| 浦城县| 襄垣县| 南木林县| 汝州市| 花垣县| 志丹县| 英德市| 天峻县| 吉木萨尔县| 巢湖市| 策勒县| 龙井市| 天柱县| 金沙县| 百色市| 丹寨县| 定远县| 武安市| 荔浦县| 叙永县| 东海县| 阜阳市| 临邑县| 临猗县| 肇州县| 昌宁县| 永昌县| 新和县| 石泉县| 德江县| 中阳县| 长岭县| 湘西| 息烽县| 关岭| 崇文区| 平邑县| 普兰县| 赤城县|