详解Android数据存储之SQLCipher数据库加密
Android Room数据库加密详解
SQLite是一个轻量级的、跨平台的、开源的嵌入式数据库引擎,也是一个关系型的的使用SQL语句的数据库引擎,
读写效率高、资源消耗总量少、延迟时间少,使其成为移动平台数据库的最佳解决方案(如Android、iOS)
但是Android上自带的SQLite数据库是没有实现加密的,我们可以通过Android Studio直接导出应用创建的数据库文件,然后通过如SQLite Expere Personal 这种可视化工具打开数据库文件进行查看数据库的表结构,以及数据,这就导致存储在SQLite中的数据可以被任何人查看,如果是一些账号密码,或者聊天数据等,那么我们的应用就面临着严重的安全漏洞隐患; 因此有了一些数据库的加密 *** 作。几乎所有的APP应用数据都会存储在SQLite数据库中。
常用的方法有两种。一种是对SQLite数据库的数据进行加密,如库名表名字段名等等;第二种就是使用SQLCipher对SQLite数据库加密,主要就说一下第二种。
怎么提取应用数据文件,提取数据这里不做陈述,不会的自己先熟悉一下安卓文件存储结构去。
SQLCipher是基于SQLite基础之上实现了数据库加密的开源库,可以采用第三方的开源框架SQLCipher,SQLCipher是基于原生SQlite数据库进行扩展,实现数据库整体加密(数据库文件加密),提供的数据库的 *** 作接口,和原生的SQLite数据库 *** 作接口基本一样的;我们创建或者打开数据库都需要密码,我们打开数据库时的密码,需要和创建数据库时的密码保护一致,否则打开数据库时会报错,提示打开的文件不是一个数据库文件
file is not a database
说明该文件无法直接访问,
SQLCipher的特点就不做赘述了,说一下Android中集成SQLiteCipher: 添加依赖implementation 'net.zetetic:android-database-sqlcipher:4.4.3@aar'
implementation "androidx.sqlite:sqlite:2.0.1"
使用SQLiteCipher提供的相关接口 *** 作
除了创建数据库获取可读写数据库对象和原生SQLite API有些区别一样,其他执行SQL语句,查询表中数据的API 和原生 SQlite API是完全一样的
SQLiteCipher结合Room框架
我们这里介绍一下Google Jetpack组件中的ORM框架 Room结合SQLiteCipher使用;
其实Room结合SQLiteCipher使用,就是在创建数据库时候,需要先创建一个SupportFactory
,SupportFactory中会传入通过SQLiteCipher中的SQLiteDatabase获取的密码字节数据使用
SQLiteDatabase.loadLibs(this)
val passphrase = SQLiteDatabase.getBytes("test123".toCharArray())
val factory = SupportFactory(passphrase, object : SQLiteDatabaseHook {
override fun preKey(database: SQLiteDatabase?) {
LogUtil.e(TAG, "preKey")
}
override fun postKey(database: SQLiteDatabase?) {
LogUtil.e(TAG, "postKey")
}
}, true)
在创建数据库的时候,通过Room自带的openHelperFactory()方法传入创建的SupportFactory即可,这样就能创建加密数据库了;其他 *** 作,就按照Room正常的 *** 作即可
var mInstance= Room
.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
DB_NAME
).addCallback(object : RoomDatabase.Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
Log.e(TAG, "onCreate: ")
initMusicTypeData(context, db)
}
}).openHelperFactory(factory)
.build()
查看并导出加密数据库文件
导出数据库文件 我们手机通过USB连接电脑之后,打开开发者模式,然后在Android Studio菜单栏中的View->
Tool Windows->Device File Explorer
然后在Device File Explorer中进入 data/data/应用包名/databases中找到我们创建的数据库文件demo.db,然后我们可以右键改文件Save As 导出该数据库文件
查看加密数据库文件
可以通过DB Browser for SQLite来查看加密的数据库文件
下载地址:https://sqlitebrowser.org/dl/
下载安装之后,我们打开安装目录下的DB Browser for SQLCipher.exe程序,然后通过菜单栏中的文件->打开数据库->打开导出的加密数据库文件,然后输入数据库文件的加密密码,就是我们在程序中SQLiteCipher加密数据库文件时使用的密码,输入正确密码后,可以正常打开数据库文件
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)