使用SQLCipher加密SQLite數據庫

cnffe 9年前發布 | 31K 次閱讀 SQLCipher SQLite 數據庫服務器

在iOS應用程序開發中經常需要使用SQLite來存儲數據,很多時候需要加密保存一部分的數據。常見的做法是將要存儲的內容先加密然后存到數據庫中,使用的時候將數據進行解密,這樣就會有大量的性能消耗在數據的加解密上(性能主要取決于加解密的算法和CPU的能力)。

SQLCipher is an open source extension to SQLite that provides transparent 256-bit AES encryption of database files.

</blockquote>

SQLite本身是支持加密功能的(免費版本不提供加密功能,商業版本是支持加密模塊)。SQLCipher是一個開源的SQLite加密擴展,支持對db文件進行256位的AES加密。

集成SQLCipher

集成SQLCipher有有兩種方法一種是按照官方的方式一步步的執行,這里就不過多的介紹。配置過程很麻煩,推薦使用下面的方式集成。

1、獲取SQLite加密模塊(SQLCipher)

在終端(Terminal)中使用pod search FMDB,在查詢的結果中可以看到有個FMDB/SQLCipher的Sub spec。

使用SQLCipher加密SQLite數據庫

如果使用FMDB和CocoaPods的話直接在你的Podfile中添加pod 'FMDB/SQLCipher'

使用SQLCipher加密SQLite數據庫

如果沒有使用CocoaPods的話建議還是安裝一個吧,或者是新建一個測試項目安裝FMDB和SQLCipher。安裝CocoaPods可以參考《使用CocoaPods管理iOS項目中的依賴庫》

2、導入SQLCipher

執行pod install之后會自動獲取SQLCipher,其實SQLCipher只有兩個文件sqlite3.h和sqlite3.m。

拷貝sqlite3.h/sqlite3.m文件到項目中,如果使用CocoaPods方式獲取SQLCipher的話,這一步驟就不需要了。

3、配置Xcode設置項

通過查詢資料SQLite是否開啟加密模塊是通過宏(SQLITE_HAS_CODEC)來配置的。那么就需要在Xcode中配置開啟SQLite加密組件的宏(如使用CocoaPods方式則不需要配置)。

使用SQLCipher加密SQLite數據庫

(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、如何使用

(1)引入sqlite3加密模塊,然后在打開數據庫之后加入如下代碼

</tr> </tbody> </table> </div>

如下圖:

使用SQLCipher加密SQLite數據庫

說明:

1)如果沒有添加-DSQLITE_HAS_CODEC配置上面的代碼會報錯

2)sqlite3_key函數需要指定加密使用的key,推薦使用UUID(可以進行salt處理)并存儲到KeyChain中。

3)如使用FMDB,可以在FMDB的open方法之后添加上面的兩行代碼。

(2)使用了加密模塊在提交到App Store時需要指明,具體的操作方法可以參考StackOverflow上面的做法。 Does my application “contain encryption”?

參考資料

1、《Adding SQLCipher to Xcode Projects》

2、《ios開發FMDB導入SQLCipher加密數據庫》

3、《SQLite數據庫加密研究》

</div> 來自:http://git.devzeng.com/blog/encrypt-sqlite-with-sqlcipher.html

 本文由用戶 cnffe 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
1 2 
const char *key = [@"devzeng" UTF8String]; sqlite3_key(_db, key, (int)strlen(key));
  • sesese色