資料庫加密一般有兩種方式
1、對所有資料進行加密
2、對資料庫檔案加密
處於客戶端效能的考慮,通常我們對資料庫檔案進行加密,在ios上用的比較多的是
sqlcipher,由於原生提供的sqlite api是c語言實現的,通常我們會用乙個在github上比較有名的乙個工具庫fmdb,fmdb對原生的sqlite進行了封裝,提供了物件導向的方式對資料庫操作,同時fmdb 也提供了對 sqlcipher 的支援
下面基於 fmdb 和 sqlcipher 演示資料庫加解密
編譯sqlcipher需要做一些配置,具體配置詳情見:
我們通過 cocoapod 引用 fmdb 和sqlcipher 我們可以直接拿到編譯好的.a檔案,直接用就可以
1、通過cocoapod 引用庫
pod如果專案已經引用了fmdb,改為fmdb/sqlcipher 重新install一次即可,通過cocoapod新增的fmdb預設還是沒有加密的,要使用加密的功能,需要在資料庫open後呼叫setkey方法設定key,如下'fmdb/sqlcipher', '~> 2.5'
-(bool)open關鍵**:[self setkey:encryptkey_];int err = sqlite3_open([self sqlitepath], &_db );
if(err !=sqlite_ok)
else
if (_maxbusyretrytimeinterval > 0.0
)
return
yes;
}
2、新增資料庫加密操作類
上面**是fmdatabase中的,cocoapod新增的庫不推薦修改,修改後不利於類庫的統一管理和更新
有些人則不用cocoapod引用fmdb,而是直接把fmdb的原始檔拷貝到專案中,然後進行修改,我更傾向與保留cocoapod對fmdb的管理,通過新增類提供對資料庫加密的支援,這裡新增兩個類:fmencryptdatabase 和
fmencryptdatabasequeue
我們可以重用 fmdatabase 和 fmdatabasequeue 的邏輯,所以我們可以繼承自他們,同時我再fmencryptdatabase 中提供兩個資料庫遷移的方法,可以把未加密的資料庫轉換為加密的資料庫,也可以反向轉換
didfinishlaunchingwithoptions: 方法進行設定
3、測試
好了,通過上面兩個類建立的資料庫都是加密過的,下面做一些測試,具體**見後面的demo
加密後的資料庫暫時沒有找到可以開啟的gui工具檢視(mesasqlite),即使輸入secretkey也無法檢視,不知道為何
4、常見問題問題
iOS FMDB 資料庫相關
在iphone上是採用sqlite進行資料儲存是我一種比較習慣性的做法。一般在其他平台也比較習慣用sqlite,比如android。而iphone上有一些封裝好的第三方框架提供使用,更節省了許多時間。如 sqlitepersistentobjects fmdb。今天查詢了這個兩個框架,感覺fmdb的...
iOS FMDB 資料庫 詳解
一 簡單說明 1.什麼是fmdb fmdb是ios平台的sqlite資料庫框架 fmdb以oc的方式封裝了sqlite的c語言api 2.fmdb的優點 使用起來更加物件導向,省去了很多麻煩 冗餘的c語言 對比蘋果自帶的core data框架,更加輕量級和靈活 提供了多執行緒安全的資料庫操作方法,有...
iOS FMDB操作sqlite資料庫
一 簡單說明 1.什麼是fmdb fmdb是ios平台的sqlite資料庫框架 fmdb以oc的方式封裝了sqlite的c語言api 2.fmdb的優點 使用起來更加物件導向,省去了很多麻煩 冗餘的c語言 對比蘋果自帶的core data框架,更加輕量級和靈活 提供了多執行緒安全的資料庫操作方法,有...