GitHub地址
EncryptSqlite3
加密sqlite3數據庫,產生的數據庫文件別人打不開。
實現原理
- 在寫入文件前對每個字節加密,這樣存入文件的就是加密后的數據。
- 將從文件讀取的數據每個字節都解密,這樣就得到正確數據用於處理。
- 可以搜索c/sqlite3.c和go/sqlite3-binding.c這兩個源碼中的(ENCRYPT_SQLITE3)宏,分析代碼就行。
使用方法
在./c/和./golang/目錄中都有build.bat和build.sh
在windows環境使用cmd進入目錄執行.\build.bat即可
在Linux環境進入目錄后執行./build.sh即可
可以使用編譯后的官方控制台程序./c/sqlite3 t.db來通過命令行讀寫sqlite3文件
不足之處
由於寫入和讀取位置由sqlite3控制,因此加解密都只能為針對單字節。因為大多數對稱加密都需要從頭開始加解密,像AES有些模式后面加密的數據依賴前面加密的結果。所以我在本項目中實現的僅僅是將每個字節和密鑰進行異或,這是最簡單的單字節加解密。當然如果別人知道這個這個規則,最多嘗試255次就能破解。當然我有一些自己的想法,比如做一些隨機數混淆單字節數據,但需要設計可靠的加解密邏輯,有興趣的可以自己嘗試吧。

