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[] 作为密码;

下面说一说使用过程中可能出现的问题

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

虽然guide页是在onCreate里创建的数据库对象,但是实测执行这段代码耗时非常严重,通常情况下为0.8s-1.5s左右,不像使用原生的速度很快不会卡顿,因此建议维系一个全局的单例句柄,可以在应用启动加载页异步加载数据库对象设置为Application全局变量使用或者在每次需要获取db对象的时候都使用异步操作,如果你使用单例模式,要保证每次同时操作数据库的db对象不再同一个线程,因此全部数据操作建议都用异步操作。

密码是对的但是打不开数据,如果你有使用多个类似个继承自DBHelper的对象,加密密钥是一样的也是不能操作的,要么合并这些类,要么把数据库分开[转]正确使用SQLCipher来加密Android数据库 - 朝野布告

参考文档:http://www.tuicool.com/articles/eYNFbuA Android本身自带有不加密的数据库SQLite,如果要保存密码之类的敏感数据在本地的话方法一是使用字段加密 ...

正确使用SQLCipher来加密Android数据库

Android本身自带有不加密的数据库SQLite,如果要保存密码之类的敏感数据在本地的话方法一是使用字段加密解密算法,方法二是整个数据库都加密掉.如果只是加密解密某个字段(如password)就推荐 ...

sqlcipher for android

github 地址 https://github.com/sqlcipher/android-database-sqlcipher 官网教程 https://www.zetetic.net/sqlci ...

【腾讯Bugly干货分享】Android ImageView 正确使用姿势

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. Android(安卓)Jetpack 使用入门
  6. Android(安卓)学习资源-博客篇
  7. android:background="?attr/colorPrimary",Android中 @和?区别以
  8. Android媒体库使用分组查询
  9. Android(安卓)使用shape来优化界面效果

随机推荐

  1. Android中MediaPlayer的setDataSource方
  2. Fragment的使用简介【Android】
  3. Android错误集
  4. android write file
  5. Android(安卓)深入研究SQLite实例(二)
  6. android 使图片显示 圆角
  7. Android操作系统11种传感器介绍
  8. Android获取Manifest中元素的值
  9. android用intent打开各种文件
  10. 【转】Android(安卓)studio2.2.3 支持Jav