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

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

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

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

對比以上兩種方式州藕,第一種方式的常見做法是是將要存儲的內(nèi)容先加密然后存到數(shù)據(jù)庫中束世,使用的時候?qū)?shù)據(jù)庫解密,但是這樣會消耗很多時間床玻,大部分性能消耗在數(shù)據(jù)的加解密上毁涉,同時,第二種方式锈死,SQLite本身支持加密功能(免費版的不支持) 贫堰,SQLCipher是一個開源的SQLite加密擴(kuò)展,支持對db文件進(jìn)行256位的AES加密待牵,通常我們會用FMDB這個工具庫其屏,F(xiàn)MDB對原生的SQLite進(jìn)行了封裝,提供了面向?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不使用特定的二進(jìn)制密鑰蛛倦,requires exactly 256 bits of key material

PRAGMA key = "x'2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99'";

一旦關(guān)鍵設(shè)置SQLCipher會自動加密所有數(shù)據(jù)的數(shù)據(jù)庫。注意啦桌,如果你不設(shè)置一個鍵然后SQLCipher操作相同一個標(biāo)準(zhǔn)的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)系作者
  • 序言:七十年代末地来,一起剝皮案震驚了整個濱河市戳玫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌未斑,老刑警劉巖咕宿,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蜡秽,居然都是意外死亡府阀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門芽突,熙熙樓的掌柜王于貴愁眉苦臉地迎上來试浙,“玉大人,你說我怎么就攤上這事寞蚌√锇停” “怎么了钠糊?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長壹哺。 經(jīng)常有香客問我抄伍,道長,這世上最難降的妖魔是什么斗躏? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任逝慧,我火速辦了婚禮,結(jié)果婚禮上啄糙,老公的妹妹穿的比我還像新娘。我一直安慰自己云稚,他們只是感情好隧饼,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著静陈,像睡著了一般燕雁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鲸拥,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天拐格,我揣著相機(jī)與錄音,去河邊找鬼刑赶。 笑死捏浊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的撞叨。 我是一名探鬼主播金踪,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼牵敷!你這毒婦竟也來了胡岔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤枷餐,失蹤者是張志新(化名)和其女友劉穎靶瘸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毛肋,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡怨咪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了村生。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惊暴。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖趁桃,靈堂內(nèi)的尸體忽然破棺而出辽话,到底是詐尸還是另有隱情肄鸽,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布油啤,位于F島的核電站典徘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏益咬。R本人自食惡果不足惜逮诲,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望幽告。 院中可真熱鬧梅鹦,春花似錦、人聲如沸冗锁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冻河。三九已至箍邮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叨叙,已是汗流浹背锭弊。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留擂错,地道東北人味滞。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像马昙,于是被迫代替她去往敵國和親桃犬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

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

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