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.代码下载地址

源码下载,请点击这里

你可能感兴趣的:(greenDAO的使用详解---(4)greenDAO3.2.2结合sqlcipher加密数据库)