1. 程式人生 > >greenDAO的使用詳解---(4)greenDAO3.2.2結合sqlcipher加密資料庫

greenDAO的使用詳解---(4)greenDAO3.2.2結合sqlcipher加密資料庫

greenDAO的使用詳解—(4)greenDAO3.2.2結合sqlcipher加密資料庫

1.SQLCipher介紹

是一個在SQLite基礎之上進行擴充套件的開源資料庫,它主要是在SQLite的基礎之上增加了資料加密功能,如果我們在專案中使用它來儲存資料的話,就可以大大提高程式的安全性。SQLCipher支援很多種不同的平臺,這裡僅介紹Android中SQLCipher在greenDAO3.2.2的用法。

2.使用greenDAO3.2.2結合sqlcipher加密資料庫說明

greenDAO從3.0.0版本開始就支援sqlcipher

3.加密資料庫的使用

在我們做全域性初始化的時候,如果不做加密,呼叫getWritableDatabase()方法獲取未加密的SQLiteDatabase,如果我們需要做加密,只需要調getEncryptedWritableDb()方法獲取加密的Database就可以,當我們只修改這一處時候,執行會發現報以下錯誤:


原因:greenDAO3.2.2中沒有引入sqlcipher加密庫,我們需要在自己的工程中引入該庫

至此,我們加密資料庫已經完成,是不是很簡單。

4.原始碼檢視分析

  1. 通過檢視getEncryptedWritableDb()方法的原始碼我們發現,getEncryptedWritableDb()方法是通過EncryptedHelper類獲取的Database,而EncryptedHelper類是整合net.sqlcipher.database.SQLiteOpenHelper(該類由sqlcipher庫提供),所以我們的要使用加密資料庫,必須依賴sqlcipher庫。

  2. 通過跟蹤DevOpenHelper類的onUpgrade()方法,我們發現,我們做資料庫升級的時候,最終呼叫的是DatabaseOpenHelper類的onUpgrade()方法,但是該類中的onUpgrade()方法體中沒有任何程式碼,升級方法留給子類

    而我們做加密資料庫升級的時候,onUpgrade()方法是在EncryptedHelper中呼叫

    因此在升級方法中獲取到的Database 是已經解密的,然後交給MigrationHelper做資料轉移。

5.程式碼下載地址