FMDB/SQLCipher數(shù)據(jù)庫加解密

sqlite應(yīng)用幾乎在所有的App都能看到,雖然我們的數(shù)據(jù)存儲在沙盒里面,一般情況下無法拿到,但是iOS管理軟件(如:iFunBox)可以讀取到應(yīng)用程序沙盒里面的文件,為了提高數(shù)據(jù)的安全性,我們需要考慮對數(shù)據(jù)庫進行加密

數(shù)據(jù)庫加密一般有兩種方式

1、對所有數(shù)據(jù)進行加密

2、對數(shù)據(jù)庫文件加密

處于客戶端性能的考慮,通常我們對數(shù)據(jù)庫文件進行加密,在iOS上用的比較多的是 sqlcipher,由于原生提供的sqlite API是C語言實現(xiàn)的,通常我們會用一個在github上比較有名的一個工具庫FMDB,F(xiàn)MDB對原生的sqlite進行了封裝,提供了面向?qū)ο蟮姆绞綄?shù)據(jù)庫操作,同時FMDB 也提供了對 sqlcipher 的支持

下面基于 FMDB 和 sqlcipher 演示數(shù)據(jù)庫加解密

編譯sqlcipher需要做一些配置,具體配置詳情見:https://www.zetetic.net/sqlcipher/ios-tutorial/

我們通過 cocoapod 引用 FMDB 和sqlcipher 我們可以直接拿到編譯好的.a文件,直接用就可以

1、通過cocoapod 引用庫

pod 'FMDB/SQLCipher', '~> 2.5'

如果項目已經(jīng)引用了FMDB,改為FMDB/SQLCipher 重新install一次即可,通過cocoapod添加的FMDB默認還是沒有加密的,要使用加密的功能,需要在數(shù)據(jù)庫open后調(diào)用setKey方法設(shè)置key,如下:

關(guān)鍵代碼:[self setKey:encryptKey_];

2、添加數(shù)據(jù)庫加密操作類

上面代碼是FMDatabase中的,CocoaPod添加的庫不推薦修改,修改后不利于類庫的統(tǒng)一管理和更新

有些人則不用cocoapod引用FMDB,而是直接把FMDB的源文件拷貝到項目中,然后進行修改,我更傾向與保留cocoapod對FMDB的管理,通過新增類提供對數(shù)據(jù)庫加密的支持,這里新增兩個類:FMEncryptDatabase 和 FMEncryptDatabaseQueue

我們可以重用 FMDatabase 和 FMDatabaseQueue 的邏輯,所以我們可以繼承自他們,同時我再FMEncryptDatabase 中提供兩個數(shù)據(jù)庫遷移的方法,可以把未加密的數(shù)據(jù)庫轉(zhuǎn)換為加密的數(shù)據(jù)庫,也可以反向轉(zhuǎn)換

由于secretKey一般只需要一份,所以這里使用一個靜態(tài)變量實現(xiàn),如果需要修改,可以在AppDelegate的 application:didFinishLaunchingWithOptions: 方法進行設(shè)置:

FMEncryptDatabase.h
FMEncryptDatabase.m
FMEncryptDatabase.m
FMEncryptHelper.h
FMEncryptHelper.m
FMEncryptHelper.m
FMEncryptHelper.m

3、測試

好了,通過上面兩個類創(chuàng)建的數(shù)據(jù)庫都是加密過的,下面做一些測試,具體代碼見后面的demo:

demo虛擬機運行

4、Demo

demo地址:github.com/fenglinyunshi/FmdbDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容