[DB那些事]數據庫加密

說到數據庫加密,目前最好且惟一的方案就是SqlCipher對sqlite3總體加密,微信也用的它。開源,且支持不少平臺。mysql

單就Android來講,集成不算太麻煩,1個jar包,3個so庫,1個zip。android

jar包中基本上重寫了android.database.sqlite包中全部的類,所有替換成了net.sqlcipher.sqlite包。why?由於sqlcipher加密後,須要密碼才能打開該數據庫。因此它把全部的都重寫了一遍,這是一個坑,一會Stay再來講明。git

總體來講sqlcipher仍是比較好用的,封裝好了跟正常操做數據庫的方式同樣,只是在getWritableDatabase()時要多傳個password參數。github

sqlcipher在性能上沒有太大的損失,並且在移動端數據量不是很大,基本能夠忽略不計了。sql

如今坑來了,假如你以前用的是數據庫框架,而不是使用原生的方式,那麼集成起來還有些麻煩。固然若是用的對象型數據庫,那跟sqlcipher就一點關係都沒有了。咱們這裏只說,若是之前用的是基於sqlite的數據庫框架集成sqlcipher。數據庫

好比,ormlite,它是object-relation-mapping,將你model中聲明的變量經過註解的方式和數據庫的表字段一一對應起來。微信

這個映射不在意數據庫是sqlite,mysql仍是什麼。在ormlite-core核心包中,與數據庫的鏈接是個proxy,在對應的ormlite-android中來使用android系統提供給咱們的db鏈接方式來實現這個proxy。這就是爲何ormlite要有兩個jar包。app

若是要使用sqlcipher,那麼全部android.database.sqlite中的類都要換成net.sqlcipher.sqlite中的類。可是ormlite-android中用的都是android.database.sqlite。這是個問題。對吧?框架

所幸ormlite分紅了兩個包,ormlite-core.jar, ormlite-android.jar 而且它們仍是開源的。咱們能夠把ormlite-android.jar中全部引用android.database.sqlite的地方手動替換爲net.sqlcipher.sqlite。這個注意不錯吧?eclipse

也就是說。ormlite-core.jar不變,照樣導入這個jar,只是ormlite-android.jar要改爲sqlcipher.jar中的那些Cursor, SqliteDatabase等等。

肯定好解決方案以後,剩下的就好辦了。

這裏說android studio的集成方式,若是是eclipse能夠直接新建一個工程,作成library。

首先,新建一個module,由於會改不少東西,因此儘可能單獨放一個module,之後作其餘項目能夠方便遷移。

導入sqlcipher,配置好環境。確保sqlcipher沒問題,能正確的加解密,進行crud。

導入ormlite-core.jar, 建議使用android studio的jcenter倉庫來導入

去ormlite的github主頁,把ormlite-android的源代碼拉下來,只須要ormlite-android就能夠了。

注意。要用git拉代碼,別download as zip。你須要手動切換到對應的commit上。好比ormlite-core.jar版本是4.48,那麼對應的ormlite-android也應該切換到4.48的tag上。保證兩個版本一致。

將全部ormlite-android中的代碼copy到你的module/src目錄下,而後手動將全部import android.database.sqlite的地方手動替換爲import net.sqlcipher.sqlite

改成以後會有一個錯誤,由於sqlcipher須要密碼去getWritableDatabase(String password),這裏須要對源碼作些修改,以下圖。

 

固然還有其餘的小錯誤,本身想辦法解決好了,不難。

在本身的主app module中要繼承的SqliteOpenHelper仍是OrmliteSqliteOpenHelper,sqlcipher已經集成到ormlite內部了,對外不可見。你只須要用帶有password的構造方法就能夠了。以下圖。

其餘調用方式都不用變了。之前寫的ormlite代碼都不用換了。開森,對不對。

代碼已經放到github上了。 
github.com/Stay/ormlite-sqlcipher

 

p.s. 若是你如今使用的ormlite版本不是4.48,那麼就本身動手把對應的ormlite-android的源代碼拉下來手動替換。

相關文章
相關標籤/搜索