iOS FMDB資料庫加密相關

2021-07-09 12:37:42 字數 1624 閱讀 2942

資料庫加密一般有兩種方式

1、對所有資料進行加密

2、對資料庫檔案加密

處於客戶端效能的考慮,通常我們對資料庫檔案進行加密,在ios上用的比較多的是 

sqlcipher,由於原生提供的sqlite api是c語言實現的,通常我們會用乙個在github上比較有名的乙個工具庫fmdb,fmdb對原生的sqlite進行了封裝,提供了物件導向的方式對資料庫操作,同時fmdb 也提供了對 sqlcipher 的支援

下面基於 fmdb 和 sqlcipher 演示資料庫加解密

編譯sqlcipher需要做一些配置,具體配置詳情見:

我們通過 cocoapod 引用 fmdb 和sqlcipher 我們可以直接拿到編譯好的.a檔案,直接用就可以

1、通過cocoapod 引用庫

pod 

'fmdb/sqlcipher', '~> 2.5'

如果專案已經引用了fmdb,改為fmdb/sqlcipher 重新install一次即可,通過cocoapod新增的fmdb預設還是沒有加密的,要使用加密的功能,需要在資料庫open後呼叫setkey方法設定key,如下

-(bool)open 

int err = sqlite3_open([self sqlitepath], &_db );

if(err !=sqlite_ok)

else

if (_maxbusyretrytimeinterval > 0.0

)

return

yes;

}

關鍵**:[self setkey:encryptkey_];

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框架,更加輕量級和靈活 提供了多執行緒安全的資料庫操作方法,有...