FMDB數(shù)據(jù)庫加密

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

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

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

對比以上兩種方式,第一種方式的常見做法是是將要存儲的內(nèi)容先加密然后存到數(shù)據(jù)庫中,使用的時候?qū)?shù)據(jù)庫解密,但是這樣會消耗很多時間,大部分性能消耗在數(shù)據(jù)的加解密上,同時,第二種方式,SQLite本身支持加密功能(免費版的不支持) ,SQLCipher是一個開源的SQLite加密擴展,支持對db文件進行256位的AES加密,通常我們會用FMDB這個工具庫,F(xiàn)MDB對原生的SQLite進行了封裝,提供了面向?qū)ο蟮姆绞綄?shù)據(jù)庫操作,同時FMDB 也提供了對 SQLCipher 的支持。

集成SQLCipher

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

1.下載 SQLCipher 文件?

2.將 sqlcipher.xcodeproj 添加到你的工程中

3.配置工程

在Build Settings 中,找到Search Paths 的 Header Search Paths 添加 $(PROJECT_DIR)/sqlcipher/src

4.在Other Linker Flags中,添加 $(BUILT_PRODUCTS_DIR)/libsqlcipher.a

5.在Other C Flags中,添加 -DSQLITE_HAS_CODEC

6.在Build Phases 中 ,找到Target Dependencies ,選擇?sqlcipher?添加

7.在Link Binary With Libraries中,選擇添加 libsqlcipher.a 類庫

8.在Link With Libraries中,添加 Security.framework.

注意:

如果 libsqlite3.dylib 或者其他 SQLite framework 在你的Link Binary With Libraries 列表中,記得安全移除它。Repeat these steps for any other targets in your project that will depend on SQLCipher, i.e. unit tests.

集成代碼:

現(xiàn)在,SQLCipher類庫并入項目中可以立即開始使用該庫了。SQLCipher加密數(shù)據(jù)庫是容易的:

@ 打開數(shù)據(jù)庫

@ 使用sqlite3_key功能提供關(guān)鍵材料。在大多數(shù)情況下,這應(yīng)該發(fā)生在第一次操作后打開數(shù)據(jù)庫

@ 運行查詢來驗證數(shù)據(jù)庫可以被打開(即通過查詢方案)

@ 作為預(yù)防措施,運行一個查詢,以確保應(yīng)用程序是我們使用SQLCipher在活動連接

在大多數(shù)情況下,使用SQLCipher PBKDF2,一個加鹽迭代的密鑰導(dǎo)出函數(shù),獲取加密密鑰。應(yīng)用程序可以告訴SQLCipher在blob不使用特定的二進制密鑰,requires exactly 256 bits of key material

PRAGMA key = "x'2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99'";

一旦關(guān)鍵設(shè)置SQLCipher會自動加密所有數(shù)據(jù)的數(shù)據(jù)庫。注意,如果你不設(shè)置一個鍵然后SQLCipher操作相同一個標準的SQLite數(shù)據(jù)庫。

這里我們使用cocoapod 引用 FMDB 和SQLCipher。

1.獲取SQLCipher加密模塊

Podfile中添加 pod 'FMDB/SQLCipher' ?或者 pod 'FMDB/SQLCipher', '~> 2.5'

2.導(dǎo)入SQLCipher

執(zhí)行 pod install后自動獲取SQLCipher,SQLCipher只有兩個文件sqlite3.h、sqlite3.m,如果不是通過CocoaPods獲取SQLCipher模塊的話需要手動拷貝sqlite3.h、sqlite3.m文件到工程中。

3.配置Xcode

通過宏(SQLITE_HAS_CODEC)來配置SQLite是否開啟加密模塊,我們需要在Xcode中配置開啟加密模塊組件的宏,本文介紹CocoaPods方式的則不用配置。

(1)target -> Build Setting -> Other C Flags添加-DSQLITE_HAS_CODEC、-DSQLITE_TEMP_STORE=2、-DSQLITE_THREADSAFE、-DSQLCIPHER_CRYPTO_CC幾項配置

2)target -> Build Setting -> Other Linker Flags添加-framework Security配置

4.添加加密代碼

一般是在數(shù)據(jù)庫open之后就用這個 setKey 方法。

說明:

1. 如果項目中原來有FMDB,不推薦直接引入FMDB/SQLCipher,修改后不利于類庫的統(tǒng)一管理和更新。我們可以直接將sqlite3.h、sqlite3.m文件拖到工程中,然后配置Xcode即可。簡單來說步驟如下:

(1)在你有FMDB的工程里,加入sqlite3.h 和 sqlite3.m

(2)在工程的build setting里修改兩個配置

一個是other c flags ,如上面圖的那個 other c flags

一個是 other link flags , 入上圖那個other lilnk flags

然后FMDatabase 的 setkey 方法就可以用了,在打開數(shù)據(jù)庫后,調(diào)用此方法,數(shù)據(jù)庫文件就加密可以了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在iOS開發(fā)過程中經(jīng)常需要用到SQLite來存儲數(shù)據(jù),由于Apple的沙盒機制,我們App的數(shù)據(jù)存儲在沙盒里面,...
    伍驍辛閱讀 4,512評論 8 15
  • 介紹: 使用SQLite數(shù)據(jù)庫的時候,有時候?qū)τ跀?shù)據(jù)庫要求比較高,特別是在iOS8.3之前,未越獄的系統(tǒng)也可以通過...
    farawei閱讀 5,354評論 2 51
  • 在iOS應(yīng)用程序開發(fā)中經(jīng)常需要使用SQLite來存儲數(shù)據(jù),很多時候需要加密保存一部分的數(shù)據(jù)。常見的做法是將要存儲的...
    Crazy2015閱讀 5,814評論 0 4
  • 這篇文章介紹如何對數(shù)據(jù)庫文件進行加密,基于FMDB+SQLCipher,標明踩過的坑,留給同樣掉進坑里的小伙伴參考...
    7544eb39c4ac閱讀 6,701評論 3 28
  • 一 秋讓羽為他點上一杯瑪格麗特,這是他最愛喝的雞尾酒。他喜歡這酒的酸咸,就像是被鐘愛的女孩輕輕摑了一掌,三分的惱怒...
    李小陪閱讀 572評論 0 0

友情鏈接更多精彩內(nèi)容