使用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。
![]()
如果使用FMDB和CocoaPods的話直接在你的Podfile中添加pod 'FMDB/SQLCipher'
![]()
如果沒有使用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方式則不需要配置)。
![]()
(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加密模塊,然后在打開數據庫之后加入如下代碼
1 2</tr> </tbody> </table> </div> const char *key = [@"devzeng" UTF8String]; sqlite3_key(_db, key, (int)strlen(key));如下圖:
![]()
說明:
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》
</div> 來自:http://git.devzeng.com/blog/encrypt-sqlite-with-sqlcipher.html本文由用戶 cnffe 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!相關經驗
相關資訊
sesese色