開(kāi)發(fā)過(guò)程中州刽,有時(shí)候需要使用SQLite緩存很多用戶信息或者用戶記錄辕狰,跟后臺(tái)交互時(shí)矿酵,我們會(huì)把這些數(shù)據(jù)加密處理傳給后臺(tái)唬复,但是本地的數(shù)據(jù)也是不安全的,此時(shí)我們就有了數(shù)據(jù)庫(kù)加密的需求全肮,因?yàn)闃侵魇鞘褂肍MDB做數(shù)據(jù)庫(kù)的操作敞咧,所以在這里實(shí)現(xiàn)FMDB數(shù)據(jù)庫(kù)加密:
數(shù)據(jù)里加密有兩種方法:
1.對(duì)數(shù)據(jù)庫(kù)內(nèi)容加密,存的時(shí)候加密倔矾,用得時(shí)候解密妄均。
2.直接對(duì)數(shù)據(jù)庫(kù)文件加密。
1.加密方法一
對(duì)數(shù)據(jù)庫(kù)內(nèi)容加密這里就不細(xì)說(shuō)了哪自,在數(shù)據(jù)存入前對(duì)數(shù)據(jù)進(jìn)行加密后存入丰包,取出時(shí)對(duì)數(shù)據(jù)進(jìn)行解密使用,樓主選擇第二種方式進(jìn)行的數(shù)據(jù)庫(kù)文件加密
2.加密方法二
1.因?yàn)镕MDB支持SQLCipher壤巷,所以我們這里使用SQLCipher這個(gè)庫(kù)邑彪,這是官方配置說(shuō)明地址,但是不推薦這種方式胧华,配置經(jīng)常會(huì)失敗寄症,而且使app包加大了很多兆
2.那么這里大家就都會(huì)問(wèn)了,不手動(dòng)配置矩动,那怎么導(dǎo)入有巧,F(xiàn)MDB的官網(wǎng)上給我們提供了很好的方法,大家可能也都想到了悲没,Cocoapods
FMDB給出的建議是:如果使用fmdb與SQLCipher必須使用fmdb / SQLCipher subspec篮迎。fmdb / SQLCipher subspec聲明作為一個(gè)依賴SQLCipher,允許fmdb是 dsqlite_has_codec 的編譯示姿。
3.Cocoapods導(dǎo)入
導(dǎo)入成功后甜橱,工程文件變成下邊的樣子:
選擇 .xcworkspace 文件打開(kāi)工程
打開(kāi)工程,你可以看到栈戳,需要的庫(kù)都已經(jīng)導(dǎo)入了
4.之后添加加密代碼,(可以選擇直接在FMDatabase.m里加岂傲,也可以選擇在自己的個(gè)人代碼中加入,一般是在open之后用 setKey 方法子檀。注意樓主這里的@“admin”是隨便寫(xiě)的镊掖,這里就是設(shè)置一下數(shù)據(jù)庫(kù)加密解密的字段乃戈,可以根據(jù)公司的需求寫(xiě)入自己想要設(shè)置的鑰匙串)
5.配置完成后,編譯運(yùn)行堰乔,創(chuàng)建數(shù)據(jù)庫(kù)偏化,使用第三方軟件進(jìn)行數(shù)據(jù)庫(kù)讀取看一下是否加密成功
樓主使用的是下圖里的軟件
找到創(chuàng)建的數(shù)據(jù)庫(kù),打開(kāi)提示輸入密碼镐侯,否則看不到數(shù)據(jù)庫(kù)里的表的內(nèi)容侦讨,如下圖:
此時(shí)我們的數(shù)據(jù)庫(kù)已經(jīng)加密成功了
3.經(jīng)過(guò)研究后發(fā)現(xiàn),可以不使用Cocoapods導(dǎo)入SQLCipher進(jìn)行數(shù)據(jù)庫(kù)加密苟翻,下邊是簡(jiǎn)單步驟:
1.在你有fmdb的工程里韵卤,加入sqlite3.h 和 sqlite3.m兩個(gè)文件
2.在工程的build setting里修改兩個(gè)配置
一個(gè)是other c flags ,如上面圖的那個(gè) other c flags
一個(gè)是 other link flags 崇猫, 入上圖那個(gè)other lilnk flags
然后FMDatabase 的 setkey 方法就可以用了沈条,在打開(kāi)數(shù)據(jù)庫(kù)后,調(diào)用此方法诅炉,數(shù)據(jù)庫(kù)文件就加密ok了蜡歹。