[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的源代码拉下来手动替换。

相关文章
相关标签/搜索