天天看點

資料庫加密之iOS項目配置SQLCipherSQLCipher為Xcode項目添加SQLCipher

SQLCipher

SQLCipher資料庫加密配置說明

本文不涉及代碼編寫,如有疑問,可參考https://www.zetetic.net/sqlcipher/ios-tutorial/

或者issue聯系

為Xcode項目添加SQLCipher

SQLite已經是iOS應用程式中持久資料存儲的流行API,是以開發的上升是顯而易見的。作為一名程式員,您可以使用一個穩定的,經過充分記錄的API,它可以在Objective-C中提供許多好的包裝器,如FMDB和加密核心資料。所有安全問題都與應用程式代碼完全脫鈎,并由底層架構進行管理。

SQLCipher項目的架構代碼是開源的,是以使用者可以确信應用程式不使用不安全或專有的安全代碼。此外,SQLCipher還可以在Android,Linux,OSX和Windows上編譯,用于開發跨平台應用程式的使用者。

在iOS應用程式中使用SQLCipher是非常簡單的。本文檔描述了使用CommunityEdition源代碼建構過程将SQLCipher內建到現有的iOS項目中。本教程假定您熟悉基本的iOS應用程式開發和Xcode(6.1.1)的工作安裝。同樣的基本步驟也可以應用于OSX項目。

準備工作

安裝Xcode和iOS或者OSX SDK。通路Apple Developer site下載下傳最新的Xcode和iOS、OSX SDKs

OpenSSL

OpenSSL已經不是在iOS或OSX上建構SQLCipher的必要步驟,因為該項目預設使用Apple的CommonCrypto架構進行硬體加速加密。如果您願意,您仍然可以使用其他加密程式(如OpenSSL)建構SQLCipher,或者您可以自己編寫。

SQLCipher

啟動終端,cd到你的項目根目錄,使用git克隆SQLCipher代碼

$ cd ~/Documents/code/SQLCipherApp 

$ git clone https://github.com/sqlcipher/sqlcipher.git
           

Xcode項目配置

将SQLCipher庫提供sqlcipher.xcodeproj檔案添加到你的項目中,編譯成靜态庫,并連結到項目target上。

添加項目依賴

在Xcode中打開您的iOS應用程式的項目或工作區,在左側檔案目錄中找到iOS應用程式的頂級Project圖示并單擊選中。右鍵單擊該處,然後選擇“Add Files to ‘XXX’”(XXX将根據您的應用程式的名稱而有所不同)。由于我們将SQLCipher直接克隆到與iOS應用程式相同的檔案夾中,是以您應該在根項目檔案夾中看到一個sqlcipher檔案夾。打開此檔案夾并選擇sqlcipher.xcodeproj:

資料庫加密之iOS項目配置SQLCipherSQLCipher為Xcode項目添加SQLCipher
資料庫加密之iOS項目配置SQLCipherSQLCipher為Xcode項目添加SQLCipher

添加Project配置項

開始設定Project的Build settings(注意是Project,而不是Targets),選中Build Settings,搜尋“Header Search Paths”,對應的增加路徑:$(PROJECT_DIR)/sqlcipher:

資料庫加密之iOS項目配置SQLCipherSQLCipher為Xcode項目添加SQLCipher
資料庫加密之iOS項目配置SQLCipherSQLCipher為Xcode項目添加SQLCipher

接下來,搜尋“Other Linker Flags”,對應的增加路徑:$(BUILT_PRODUCTS_DIR)/libsqlcipher.a,并拖動放到第一個位置,以確定SQLCipher是第一個被鍊入你的項目的靜态庫

資料庫加密之iOS項目配置SQLCipherSQLCipher為Xcode項目添加SQLCipher

然後,搜尋“Other C Flags”,對應的增加路徑:-DSQLITE_HAS_CODEC,確定SQLCipher能夠編譯成功

資料庫加密之iOS項目配置SQLCipherSQLCipher為Xcode項目添加SQLCipher

添加Targets配置項

下一步,選擇“Targets”,給項目的target增加Target依賴確定SQLCipher在項目代碼前面編譯,選擇”Build phases“

展開”Target Dependencies“,點選+在檔案中選擇sqlcipher靜态庫:

資料庫加密之iOS項目配置SQLCipherSQLCipher為Xcode項目添加SQLCipher

展開”Link Binary With Libraries“,點選+在檔案中選擇libsqlcipher.a靜态庫:

資料庫加密之iOS項目配置SQLCipherSQLCipher為Xcode項目添加SQLCipher

最後,再給”Link Binary With Libraries“添加”Security.framework“。

資料庫加密之iOS項目配置SQLCipherSQLCipher為Xcode項目添加SQLCipher

Tip:如果libsqlite3.dylib或者其他SQLite庫已經存在于”Link Binary With Libraries“清單中,記得要删除掉!!!

如果項目中還有其他主要target,重複上面的步驟即可

內建代碼

到此SQLCipher已經配置完畢,接下來就是添加代碼,我用的FMDB,本身支援splcipher加密:

- (BOOL)setKey:(NSString*)key { 

    NSData *keyData = [NSData dataWithBytes:[key UTF8String] length:(NSUInteger)strlen([key UTF8String])]; 

    return [self setKeyWithData:keyData]; 

} 

- (BOOL)setKeyWithData:(NSData *)keyData { 

    #ifdef SQLITE_HAS_CODEC 

    if (!keyData) { 

        return NO; 

    } 

    int rc = sqlite3_key(_db, [keyData bytes], (int)[keyData length]); 

    return (rc == SQLITE_OK); 

    #else 

    #pragma unused(keyData) 

    return NO; 

    #endif 

}
           

上面摘自FMDatabase.m,可見裡面也是用了sqlite3_key();具體就不詳細寫了。