使用wxSqlite3来解决sqlite加密问题zz
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
20141222更新:
最后還是沒用wxSQLite3,而是使用了SQLCipher,感覺SQLCipher的文檔寫得好一些,可以參考這兩個鏈接:http://www.cocoachina.com/industry/20140522/8517.html ,https://www.zetetic.net/sqlcipher/ios-tutorial/?
-------------------
這里介紹一個開源項(xiàng)目:wxSQLite3,該項(xiàng)目是一個 SQLite 的 C++ warpper,它順帶將 SQLite 的加密函數(shù)實(shí)現(xiàn)了,并且它使用 AES 算法進(jìn)行加密。你可以在http://sourceforge.net/projects/wxcode/files/Components/下 載到最新的包,在目錄 \sqlite3\secure 下你可以找到一個 sqlite3.dll 文件,這個就是已編譯的帶加密的 SQLite 3 DLL 文件,而且 wxSQLite3 項(xiàng)目更新很快,你總是可以下載到較新的包。在最新的1.9.8版本中開始對256位AES加密進(jìn)行實(shí)驗(yàn),估計不久的版本就可以穩(wěn)定使用。
使用起來也很簡單,首先打開數(shù)據(jù)庫 sqlite3_open,然后在操作數(shù)據(jù)庫之前執(zhí)行 sqlite3_key 后就可進(jìn)行數(shù)據(jù)庫操作,否則會返回錯誤。
sqlite3_key是輸入密鑰,如果數(shù)據(jù)庫已加密必須先執(zhí)行此函數(shù)并輸入正確密鑰才能進(jìn)行操作,如果數(shù)據(jù)庫沒有加密,執(zhí)行此函數(shù)后進(jìn)行數(shù)據(jù)庫操作反而會出現(xiàn)“此數(shù)據(jù)庫已加密或不是一個數(shù)據(jù)庫文件”的錯誤。
int sqlite3_key( sqlite3 *db, const void *pKey, int nKey),db 是指定數(shù)據(jù)庫,pKey 是密鑰,nKey 是密鑰長度。例:sqlite3_key( db, “abc”, 3);
sqlite3_rekey 是變更密鑰或給沒有加密的數(shù)據(jù)庫添加密鑰或清空密鑰,變更密鑰或清空密鑰前必須先正確執(zhí)行 sqlite3_key。在正確執(zhí)行 sqlite3_rekey 之后在 sqlite3_close 關(guān)閉數(shù)據(jù)庫之前可以正常操作數(shù)據(jù)庫,不需要再執(zhí)行 sqlite3_key。
int sqlite3_rekey( sqlite3 *db, const void *pKey, int nKey),參數(shù)同上。
清空密鑰為 sqlite3_rekey( db, NULL, 0)。
缺點(diǎn):
嚴(yán)重依賴于wxWidgets C++ library。不利于發(fā)布,編譯、維護(hù)繁瑣。
參考:
android/ios SQLite數(shù)據(jù)庫sqlcipher加密解密技術(shù)-幾種解決方案分析比較wxSqlite3
轉(zhuǎn)載于:https://my.oschina.net/ioslighter/blog/359007
總結(jié)
以上是生活随笔為你收集整理的使用wxSqlite3来解决sqlite加密问题zz的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 说说Thread.Sleep(0)的那些
- 下一篇: 何时开始phonics学习及配套阅读训练