GreenDao Encrypt

翻译 2016年08月31日 13:38:04

GreenDao Encryption 翻译

数据库加密
greenDao支持加密的数据库来保护敏感资料。虽然新版本的Android支持文件系统加密,但是它自身不能提供额外的对数据库文件的安全支持。一旦攻击者持有了数据库文件(在一个root设备上或者通过一些安全漏洞),他就能使用所有内部文件。使用一个加密的数据库会多一层安全保护。密码能阻止攻击者容易的打开数据库文件。

传统的SQLite和SQLCipher

因为Android不支持原生数据库加密,你需要将一个自定义构建的SQLite放进你的APK文件中。那些自定义构建由CPU依赖,原生代码构成。当然,你的APK大小会增长几M。因此,你应该只使用加密如果你真的需要。
greenDao支持SQL密码通过直接的绑定。SQLCipher是一个使用256位AES加密来自定义构建的SQLite。了解到的是SQLCipher能正常工作在Android N预览兼容版中。

建立数据库加密

第一步:调整依赖

添加下面两条依赖到你的Gradle文件中。

compile 'org.greenrobot:greendao-encryption:2.2.2'
compile 'net.zetetic:android-database-sqlcipher:3.5.1'

注意将greendao-encryption替换掉greendao(移除greendao依赖如果之前你的工程中使用了greenDao)。当然,你可以检查最新的版本。
同样的,你还需要使用另一个成品在你的工程中:

compile 'org.greenrobot:greendao-generator-encryption:2.2.0'

第二步:数据库初始化

不能使用Android的SQLiteOpenHelper,因为它会返回一个未加密的数据库。相反,greenDao的EncryptedDatabaseOpenHelper返回一个加密了的数据库并且取代标准的SQLiteOpenHelper。这个过程基本相同,只有两个不同:
(1)onCreate和onUpgrade给你一个接口de.greenrobot.dao.database.Database取代了android.database.sqlite.SQLiteDatabase。这个数据库接口有一个方法execSQL,就像SQLiteDatabase,用来创建或者升级你的数据库。

(2)getWritableDatabase和getReadableDatabase需要密码。通过这个密码,会生成一个加密的key.显然,一旦数据库用一些key来创建,后续的使用都需要同一个key才能打开数据库。

为了便利,greenDao创建了4个EncryptedDatabaseOpenHelper放进DaoMaster类中。其中标准的OpenHelper和DevOpenHelper对未加密的数据库起作用,你也能使用 EncryptedOpenHelper和EncryptedDevOpenHelper。这后两个是EncryptedDatabaseOpenHelper的子类并且它们两个返回一个加密的数据库。

数据库初始化示例代码:

Database db = new EncryptedOpenHelper(context, "mydatabase") {
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
// Use db.execSQL(...) to execute SQL for schema updates
}
}.getReadableDatabase("secret-password");
DaoSession daoSession = new DaoMaster(db).newSession();

数据库抽象

不像标准greenDao的编译过程,加密版greenDao的编译过程使用了一个轻薄的抽象层来对所有的数据库起作用。这个抽象层支持标准和不标准的SQLite:
1.Android标准的:android.database.sqlite.SQLiteDatabase
2.SQLCipher:net.sqlcipher.database.SQLiteDatabase
3.任何继承de.greenrobot.dao.database.Database的兼容版本
抽象数据库允许标准数据库和加密数据库使用同一套代码。这能使你很容易的在简单的数据库和加密的数据库之间转换,因为我们的代码是一样的当我们以DaoSession和独立的DAO为目标时。

用Robolectric单元测试

知晓SQLCipher不兼容

Android ORM框架介绍之greenDao注解及加密(三)

Android ORM框架介绍之greenDao注解及加密(三)greenDao注解greendao注解还是比较多的,具体如下图所示:常用的greendao注解package www.weshared...
  • qq_33689414
  • qq_33689414
  • 2016年08月24日 22:50
  • 2609

GreenDao3.0新特性解析(配置、注解、加密)

Greendao3.0release与7月6日发布,其中最主要的三大改变就是:1.换包名 2.实体注解 3.加密支持的优化 本文里面会遇到一些代码示例,就摘了官方文档和demo里的例子了,因为他...
  • huangjiamingboke
  • huangjiamingboke
  • 2017年03月08日 10:15
  • 921

基于Sqlcipher和GreenDao的数据库加密

由于需要修改源码,所以无法再通过compile 'de.greenrobot:greendao:2.0.0'来引入依赖库,下载GreenDao代码: git clone https://github...
  • chengcyh
  • chengcyh
  • 2015年12月09日 14:42
  • 3532

greenDAO学习分享总结

greenDAO(最新版本V2.0.0的Readme)========greenDAO is a light & fast ORM solution for Android that maps obj...
  • fancylovejava
  • fancylovejava
  • 2015年08月18日 19:02
  • 20981

GreenDAO的简单使用

[url]https://github.com/greenrobot/greenDAO加入依赖apply plugin: 'com.android.application' compile 'org....
  • AndroidNUll
  • AndroidNUll
  • 2017年04月02日 16:45
  • 652

关于第三方开源库GreenDao的使用心得

简介:GreenDao是一个用于操作Sqlite数据库的开源ORM框架,可以很方便的对数据库进行对象映射,增删改查等操作。优点是效率方面在类似框架中是最高的 使用步骤: 1、从github上将...
  • ht_android
  • ht_android
  • 2015年03月31日 17:32
  • 3467

greenDAO系列5--查询

本文转自:http://my.oschina.net/u/1052509/blog/312608 摘要 查询就是返回符合一定条件的实体。可使用原始的SQL语句执行查询;或是更好的方式...
  • wurensen
  • wurensen
  • 2015年08月23日 14:35
  • 9859

GreenDao 使用教程 二

GreenDao 使用教程 二
  • axuanqq
  • axuanqq
  • 2016年05月08日 09:58
  • 8717

使用Greendao进行批量添加数据(Android Studio读取assets下的数据库文件)

当我们使用greendao进行批量数据添加的时候,可以使用greendao提供的insert()方法,这个方法的使用范围适合在插入一条或者几条数据,只要原因在于的是,当我们使用greendao提供的i...
  • memgxingfeixiang
  • memgxingfeixiang
  • 2016年09月09日 14:12
  • 2983

GreenDAO之「04.GreenDao的各种查询方法」

程序员之所以犯错误,不是因为他们不懂,而是因为他们自以为什么都懂(来自csdn首页)...
  • qq_34358104
  • qq_34358104
  • 2017年04月09日 16:47
  • 3042
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GreenDao Encrypt
举报原因:
原因补充:

(最多只允许输入30个字)