使用wxSqlite3來解決sqlite加密問題zz

20141222更新:html

最後仍是沒用wxSQLite3,而是使用了SQLCipher,感受SQLCipher的文檔寫得好一些,能夠參考這兩個連接:http://www.cocoachina.com/industry/20140522/8517.htmlhttps://www.zetetic.net/sqlcipher/ios-tutorial/ android

-------------------
ios

這裏介紹一個開源項目:wxSQLite3,該項目是一個 SQLite 的 C++ warpper,它順帶將 SQLite 的加密函數實現了,而且它使用 AES 算法進行加密。你能夠在http://sourceforge.net/projects/wxcode/files/Components/下 載到最新的包,在目錄 \sqlite3\secure 下你能夠找到一個 sqlite3.dll 文件,這個就是已編譯的帶加密的 SQLite 3 DLL 文件,並且 wxSQLite3 項目更新很快,你老是能夠下載到較新的包。在最新的1.9.8版本中開始對256位AES加密進行實驗,估計不久的版本就能夠穩定使用。算法

使用起來也很簡單,首先打開數據庫 sqlite3_open,而後在操做數據庫以前執行 sqlite3_key 後就可進行數據庫操做,不然會返回錯誤。sql

sqlite3_key是輸入密鑰,若是數據庫已加密必須先執行此函數並輸入正確密鑰才能進行操做,若是數據庫沒有加密,執行此函數後進行數據庫操做反而會出現「此數據庫已加密或不是一個數據庫文件」的錯誤。數據庫

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

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)。spa

缺點:

嚴重依賴於wxWidgets C++ library。不利於發佈,編譯、維護繁瑣。

參考:

android/ios SQLite數據庫sqlcipher加密解密技術-幾種解決方案分析比較wxSqlite3

相關文章
相關標籤/搜索