寫這篇文章的原因是之前接觸到了關於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和你的數據庫管理軟件並不一定是用的是一套加解密機制。
有問題請留言,盡量回答。