SQLite加密

用開源的wxsqlite3
1、到SQLite官網http://www.sqlite.org/下載sqlite-amalgamation-XXXXXX.zip,它已經包含了所有的源文件,也不需要另外的輔助工具了,解壓到某一目錄,如Sqlite3。
2、如果你下的sqlite-amalgamation-XXXXXX.zip沒有makefile,那就自己做一個project吧,在VS2008裏新建一個空工程,把所有文件放入工程內;
3、到http://wxcode.sourceforge.net/components/wxsqlite3下載wxsqlite3,然後把sqlite3secure.c文件加入到工程即可;
4、在配置屬性中設置配置類型爲靜態庫(.Lib),添加預處理:
SQLITE_HAS_CODEC=1
CODEC_TYPE=CODEC_TYPE_AES128
SQLITE_CORE
THREADSAFE
SQLITE_SECURE_DELETE
SQLITE_SOUNDEX
SQLITE_ENABLE_COLUMN_METADATA
5、編譯生成Lib文件。


SQLite3的加密函數說明
sqlite3_key是輸入密鑰,如果數據庫已加密必須先執行此函數並輸入正確密鑰才能進行操作,如果數據庫沒有加密,執行此函數後進行數據庫操作反而會出現“此數據庫已加密或不是一個數據庫文件”的錯誤。

int sqlite3_key( sqlite3 *db, const void *pKey, int nKey),db 是指定數據庫,pKey 是密鑰,nKey 是密鑰長度。例:sqlite3_key( db, "abc", 3);

sqlite3_rekey是變更密鑰或給沒有加密的數據庫添加密鑰或清空密鑰,變更密鑰或清空密鑰前必須先正確執行 sqlite3_key。在正確執行 sqlite3_rekey 之後在 sqlite3_close 關閉數據庫之前可以正常操作數據庫,不需要再執行 sqlite3_key。

int sqlite3_rekey( sqlite3 *db, const void *pKey, int nKey),參數同上。

清空密鑰爲 sqlite3_rekey( db, NULL, 0)。

其實SQLite的兩個加密函數使用起來非常的簡單,下面分情況說明:

1、 給一個未加密的數據庫添加密碼:如果想要添加密碼,則可以在打開數據庫文件之後,關閉數據庫文件之前的任何時刻調用sqlite3_key函數即可,該函數有三個參數,其中第一個參數爲數據庫對象,第二個參數是要設定的密碼,第三個是密碼的長度。例如:sqlite3_key(db,"1q2w3e4r",8);        //給數據庫設定密碼1q2w3e4r

注:如果數據庫沒有加密,執行此函數後進行數據庫操作反而會出現“此數據庫已加密或不是一個數據庫文件”的錯誤?經測試,只能在新建數據庫時設置密碼!

2、 讀取一個加密數據庫中的數據:完成這個任務依然十分簡單,你只需要在打開數據庫之後,再次調用一下sqlite3_key函數即可,例如,但數據庫密碼是123456時,你只需要在代碼中加入sqlite3_key(db,"123456",6);
3、 更改數據庫密碼:首先你需要使用當前的密碼正確的打開數據庫,之後你可以調用sqlite3_rekey(db,"112233",6) 來更改數據庫密碼。

4、刪除密碼:也就是把數據庫恢復到明文狀態。這時你仍然只需要調用sqlite3_rekey函數,並且把該函數的第二個參數置爲NULL或者"",或者把第三個參數設爲0。

發佈了22 篇原創文章 · 獲贊 14 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章