greenDAO的使用详解---(4)greenDAO3.2.2结合sqlcipher加密数据库

1.SQLCipher介绍

SQLCipher是一个在SQLite基础之上进行扩展的开源数据库,它主要是在SQLite的基础之上增加了数据加密功能,如果我们在项目中使用它来存储数据的话,就可以大大提高程序的安全性。SQLCipher支持很多种不同的平台,这里仅介绍Android中SQLCipher在greenDAO3.2.2的用法。

2.使用greenDAO3.2.2结合sqlcipher加密数据库说明

greenDAO从3.0.0版本开始就支持sqlcipher


image

3.加密数据库的使用

在我们做全局初始化的时候,如果不做加密,调用getWritableDatabase()方法获取未加密的SQLiteDatabase,如果我们需要做加密,只需要调getEncryptedWritableDb()方法获取加密的Database就可以,当我们只修改这一处时候,运行会发现报以下错误:


image

原因:greenDAO3.2.2中没有引入sqlcipher加密库,我们需要在自己的工程中引入该库


image

至此,我们加密数据库已经完成,是不是很简单。

4.源码查看分析

  1. 通过查看getEncryptedWritableDb()方法的源码我们发现,getEncryptedWritableDb()方法是通过EncryptedHelper类获取的Database,而EncryptedHelper类是集成net.sqlcipher.database.SQLiteOpenHelper(该类由sqlcipher库提供),所以我们的要使用加密数据库,必须依赖sqlcipher库。


    image

    image
  2. 通过跟踪DevOpenHelper类的onUpgrade()方法,我们发现,我们做数据库升级的时候,最终调用的是DatabaseOpenHelper类的onUpgrade()方法,但是该类中的onUpgrade()方法体中没有任何代码,升级方法留给子类


    image

    而我们做加密数据库升级的时候,onUpgrade()方法是在EncryptedHelper中调用


    image

    因此在升级方法中获取到的Database 是已经解密的,然后交给MigrationHelper做数据转移。

5.代码下载地址

源码下载,请点击这里

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,145评论 25 708
  • 需要原文的可以留下邮箱我给你发,这里的文章少了很多图,懒得网上粘啦 1数据库基础 1.1数据库定义 1)数据库(D...
    极简纯粹_阅读 7,911评论 0 46
  • 【今日大事件】 小团体聚餐 得到-每天听一本书 【巨人宝日常】 法语21天第一轮倒计时✊ 晨起专注-Reading...
    小尾巴巨人阅读 134评论 1 1
  • 近闻某罹重疾,生命无常又一次跳将眼前。渊明说:死去何所道,托体同山阿。亲戚或余悲,他人亦已歌。没有唏嘘叹息,未感遗...
    老资情调阅读 212评论 0 2
  • 孔苏埃洛·范德比尔特Consuelo Vanderbilt,1877年出生在纽约城,父亲是铁路大亨。她的童年和少年...
    徐三余阅读 7,813评论 0 5

友情链接更多精彩内容