Microsoft Access(.mdb)作為輕量級桌面資料庫,其密碼保護機制隨版本演進顯著增強。本文回顧 Access 97、2000、2002 三代加密演算法原理,分析其安全特性與局限,並提供防護建議,供開發與維護人員參考。
0x42 處起始 13 位元組儲存加密密碼86 FB EC 37 5D 44 9C FA C6 5E 28 E6 13 進行 XOR 運算即可還原明文加密機制大幅改變:
0x42 起每隔一位元組)0x62 處字節與空密碼檔同位置字節 XOR 產生,作為動態金鑰參與解密旗標 = 檔案[0x62] XOR 參考檔[0x62]0x00 表示密碼結束0x14 字節:0x00 為 Access 97,0x01 為 Access 2000/2002| 版本 | 加密強度 | 風險等級 | 建議對策 |
|---|---|---|---|
| Access 97 | 極低(固定金鑰 XOR) | 高 | 嚴禁用於敏感資料;升級至新版本 |
| Access 2000/2002 | 中等(動態旗標、交錯儲存) | 中 | 搭配檔案層級加密(EFS)、強密碼、限制存取權限;敏感資料建議遷移至 SQL Server / SQLite (SQLCipher) |
// 偽代碼示意,非可執行完整程式
char PassSource2k[13] = {0xA1,0xEC,0x7A,0x9C,0xE1,0x28,0x34,0x8A,0x73,0x7B,0xD2,0xDF,0x50};
char PassSource97[13] = {0x86,0xFB,0xEC,0x37,0x5D,0x44,0x9C,0xFA,0xC6,0x5E,0x28,0xE6,0x13};
void GetMdbPass(String filePath) {
// 讀取版本標誌 0x14
// 讀取旗標 0x62
// 讀取 0x42 起 26 字節(含間隔)
// 依版本選擇金鑰陣列,按上述邏輯還原密碼
}
聲明: 以上代碼僅供加密演算法教學分析,嚴禁用於未授權存取他人資料庫。實務上應優先採用資料庫層級加密、應用層加密或遷移至具備透明資料加密(TDE)的企業級資料庫。
Access MDB 密碼保護從靜態 XOR 進化為動態旗標交錯儲存,雖提高破解門檻,但本質仍屬輕量級混淆而非強加密。企業關鍵資料請勿仰賴 MDB 密碼,應採用成熟的資料庫加密方案與完善的存取控制策略。