正確使用sqlcipher for Android


 android-database-sqlcipher是基於SQLCipher的數據庫加密框架,支持android4到android9,經常用來對android的SqlLite進行加密,現在支持Gradle集成,如果要支持androidx,可以使用Room框架,也可以配合原聲的SQLiteOpenHelper使用。

首先在你的build.gradle中添加依賴:

implementation 'net.zetetic:android-database-sqlcipher:4.2.0'  
如果要兼容androidx請參考github頁的配合Room框架使用的方案。

這里介紹怎么和原生API配合使用:

1、將所有android.database.sqlite.*的引入全部更改為net.sqlcipher.database.*,例如android.database.sqlite.SQLiteDatabase改為 net.sqlcipher.database.SQLiteDatabase;

2、在你的application的oncreate方法里面調用SQLiteDatabase.loadLibs();傳入application的上下文作為參數;

3、在你獲取數據庫對象的時候,使用SQLiteDatabase.g() ,傳入密碼,支持String,byte[],char[] 作為密碼;

這里有一個guide頁作為使用簡介https://www.zetetic.net/sqlcipher/sqlcipher-for-android/

 

下面說一說使用過程中可能出現的問題

  •  SQLiteDatabase mSQLiteDatabase = helper.getWritableDatabase(GlobalConst.DB_PASSWORD);  

雖然guide頁是在onCreate里創建的數據庫對象,但是實測執行這段代碼耗時非常嚴重,通常情況下為0.8s-1.5s左右,不像使用原生的速度很快不會卡頓,因此建議維系一個全局的單例句柄,可以在應用啟動加載頁異步加載數據庫對象設置為Application全局變量使用或者在每次需要獲取db對象的時候都使用異步操作,如果你使用單例模式,要保證每次同時操作數據庫的db對象不再同一個線程,因此全部數據操作建議都用異步操作。

  • 密碼是對的但是打不開數據,如果你有使用多個類似個繼承自DBHelper的對象,加密密鑰是一樣的也是不能操作的,要么合並這些類,要么把數據庫分開


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM