使用wxSqlite3来解决sqlite加密问题zz
2019獨角獸企業重金招聘Python工程師標準>>>
20141222更新:
最后還是沒用wxSQLite3,而是使用了SQLCipher,感覺SQLCipher的文檔寫得好一些,可以參考這兩個鏈接:http://www.cocoachina.com/industry/20140522/8517.html ,https://www.zetetic.net/sqlcipher/ios-tutorial/?
-------------------
這里介紹一個開源項目: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 后就可進行數據庫操作,否則會返回錯誤。
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)。
缺點:
嚴重依賴于wxWidgets C++ library。不利于發布,編譯、維護繁瑣。
參考:
android/ios SQLite數據庫sqlcipher加密解密技術-幾種解決方案分析比較wxSqlite3
轉載于:https://my.oschina.net/ioslighter/blog/359007
總結
以上是生活随笔為你收集整理的使用wxSqlite3来解决sqlite加密问题zz的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 说说Thread.Sleep(0)的那些
- 下一篇: 何时开始phonics学习及配套阅读训练