说到数据库加密,目前最好且唯一的方案就是SqlCipher对sqlite3整体加密,微信也用的它。开源,且支持很多平台。

单就Android来说,集成不算太麻烦,1个jar包,3个so库,1个zip。

jar包中基本上重写了android.database.sqlite包中所有的类,全部替换成了net.sqlcipher.sqlite包。why?因为sqlcipher加密后,需要密码才能打开该数据库。所以它把所有的都重写了一遍,这是一个坑,一会Stay再来说明。

整体来说sqlcipher还是比较好用的,封装好了跟正常操作数据库的方式一样,只是在getWritableDatabase()时要多传个password参数。

sqlcipher在性能上没有太大的损失,而且在移动端数据量不是很大,基本可以忽略不计了。

现在坑来了,假如你之前用的是数据库框架,而不是使用原生的方式,那么集成起来还有些麻烦。当然如果用的对象型数据库,那跟sqlcipher就一点关系都没有了。我们这里只说,如果以前用的是基于sqlite的数据库框架集成sqlcipher。

比如,ormlite,它是object-relation-mapping,将你model中声明的变量通过注解的方式和数据库的表字段一一对应起来。

这个映射不在乎数据库是sqlite,mysql还是什么。在ormlite-core核心包中,与数据库的连接是个proxy,在对应的ormlite-android中来使用android系统提供给我们的db连接方式来实现这个proxy。这就是为什么ormlite要有两个jar包。

如果要使用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。这个注意不错吧?

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

转载于:https://www.cnblogs.com/stay/p/4930773.html

[DB那些事]数据库加密相关推荐

  1. SQL2012数据库加密方法

    1.非对称密钥来保护新的对称密钥 /*--测试环境 Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Oct 19 2012 13:38:57 C ...

  2. 利用SQLChiper对Android SQLite数据库加密

    利用SQLChiper对Android SQLite数据库加密 前言: 上篇文章讲了Android studio+SQLCipher加密SQLite数据库的几个坑,跳过这几个坑,那么SQLCipher ...

  3. android sqlcipher 加密,Android 数据库加密 SQLCipher使用方法

    android sqlcipher使用方法 最近在做数据库加密,遇到了些问题,特此记录 greendao 支持数据库加密 网址https://greenrobot.org/greendao/docum ...

  4. android数据库文件是否加密存储,详解Android数据存储之SQLCipher数据库加密

    前言: 最近研究了Android Sqlite数据库以及ContentProvider程序间数据共享,我们清晰的知道Sqlite数据库默认存放位置data/data/pakage/database目录 ...

  5. Android 数据库加密

    一 一个简短的引论   SQLite是一个轻量的.跨平台的.开源的数据库引擎.它的读写效率.资源消耗总量.延迟时间和总体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方式(如Android.i ...

  6. 数据库加密sqlite3

    @数据库加密 SQLite加密方式 [转]https://www.cnblogs.com/daguo/p/3747858.html 关于SQLite SQLite是一个轻量的.跨平台的.开源的数据库引 ...

  7. SQliteCipher 数据库加密实践

    目录 1.github上获取源码,编译 2.将生成的dll其拷贝到QT中对应目录中 3.VS中创建Qt工程,引用SQL 4.补全动态库 5.使用加密数据库 6.多数据库操作 6.1 同时打开多数据库 ...

  8. NoSQL代表: Mongo DB(芒果数据库) NoSQL代表: Mongo DB(芒果数据库)

    NoSQL代表: Mongo DB(芒果数据库) 分类:Mongo DB 2012-02-28 20:46 2768人阅读 评论(0) 收藏 举报 一.MongoDB简介 MongoDB是一个基于分布 ...

  9. android sqlite加密数据库,Android Sqlite数据库加密

    Android使用的是开源的SQLite数据库,数据库本身没有加密,加密思路通常有两个: 1. 对几个关键的字段使用加密算法,再存入数据库 2. 对整个数据库进行加密 SQLite数据库加密工具: 收 ...

最新文章

  1. combobox的使用
  2. selenium webdriver你使用的是不受支持的命令行标记
  3. 数据仓库专题(2)-Kimball维度建模四步骤
  4. MyBatis 中的九种设计模式
  5. C++引用作为函数参数
  6. ETH:Windows搭建ETH(区块链技术)利用Web端和小程序端两种方式调用ETH上的SC智能合约
  7. python字符串/列表/字典互相转换
  8. while listening lectures
  9. 【深度学习】去掉softmax后Transformer会更好吗?复旦华为诺亚提出SOFT:轻松搞定线性近似...
  10. Spring BeanDefinition加载
  11. wordpress 调整段落空两,段落间的距离
  12. 《七哥说道》第二章:初出茅庐之拜师学艺
  13. Linux——系统开关机指令简单学习笔记
  14. 通过php jq ajax 提交form表单
  15. python异常处理和断言
  16. 用Quartus仿真计数器模块:
  17. 小米4 android6.01的开发者模式开启方法
  18. win10 远程桌面卡顿_主编教你win10系统使用远程桌面卡顿的步骤
  19. 网络攻防“三剑客”正式加盟墨者安全 担任首席安全顾问
  20. 如何在vue项目中实现图表进行数据分析

热门文章

  1. ubuntu/debian安装最新版docker和docker-compose
  2. ASP .NET Core MVC 控制器中获取当前登录用户
  3. Linux命令查看服务器信息
  4. AWS S3云存储服务
  5. php自定义函数出现乱码,php的imagettftext 函数出现乱码的解决方法
  6. aida64副屏监控_“遥信”在电力监控系统中的重要作用
  7. MySQL导出到excle显示不了_mysql导出select语句结果到excel文件遇到问题及解决方法_MySQL...
  8. java连接mysql数据库增删改查_java连接mysql数据库增删改查操作记录
  9. 上传jar包到nexus
  10. @Profile 根据不同环境注入bean