(iOS)sqlcipher和FMDB的使用總結(原創)


寫這篇文章的原因是之前接觸到了關於sqlite數據庫加密的問題,一般數據庫加密,無非是數據加密和數據庫文件加密,當然數據庫文件加密對手機效率可能更高一些。

下面就講一下,自己對sqlcipher和fmdb的使用心得。


1.Sqlcipher是一個很有名的庫,它的主要作用是對sqlite數據庫操作,其中一個很重要的就是加密、解密處理。它支持ios、android、wp8、mac os等, 它連接:http://sqlcipher.net。

  配置sqlcipher庫

  關於Sqlcipher在ios工程的配置過程,推薦一篇blog(http://blog.csdn.net/kuai0705/article/details/8931996#reply),我是照着他的配置的,我就不粘貼了。當然官網也有配置過程。不過我按照官網的配置,沒有成功,官網寫的比較簡單,初學者可能會遺漏東西,比如openssl。

  使用sqlcipher庫

  sqlcipher提供了sqlite數據庫各種操作方法。這里說幾個注意的地方,sqlcipher的加/解密方法sqlite3_key在它的實現文件sqlite3.c(吐槽一下,一個文件寫了14萬+行代碼...)中加了#ifdef指令(不止這一處),所以要想加/解密成功,在你調用sqlite3_key等類似方法的文件中加上相關的#define。上面的配置中有一項other c flag的配置(-DSQLITE...),在我這好像不起作用,所以我直接在文件中加的。

  下面對sqlcipher的幾個基本方法進行解釋:

  sqlite3_open,是指打開數據庫,如果數據庫不存在,就會創建這個數據庫(前提要存在這個路徑)。

  sqlite3_key,是指對打開的數據庫進行加密(新的數據庫)或者解密(需要解密的數據庫),在數據庫關閉之前,這個方法只能使用一次。

  sqlite3_rekey,是指對加密的數據庫進行更改密碼,它的使用前提是進行了sqlite3_key方法並且成功了,rekey方法的使用不限制次數。

  sqlite3_exec,是對數據庫操作方法。


 

2.FMDB是對sqlite數據庫操作封裝的很不錯的數據庫,而且它也增加了對sqlcipher的支持,也就是說,我們不直接用sqlcihper也能完成加解密操作,而且FMDB在操作sqlite方面方便得多。

  配置FMDB庫

  關於FMDB的配置過程,推薦一篇博文(http://blog.devtang.com/blog/2012/04/22/use-fmdb),他寫好了關於fmdb的配置和簡單實用。

  使用FMDB

  在使用方面,如果要實現fmdb加解密效果,你的工程也要配置好sqlcihper,關於FMDB的類和方法我就不說了,推薦的博文里面有。

  在這里有幾個注意點,關於FMResultSet,fmdb為他定義了迭代器功能,所以你想獲取result里面的值,要先執行[result next]。


  加密之后的數據庫文件,在別的數據庫管理軟件是不一定能打開的,即使你知道密碼,因為sqlcihper和你的數據庫管理軟件並不一定是用的是一套加解密機制。 

  有問題請留言,盡量回答。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM