【第22期】观点:IT 行业加班,到底有没有价值?

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...

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

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

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

GreenDao 2.2 数据库加密

第一步:创建一个Java工程: 在gradle文件中添加依赖: compile 'org.greenrobot:greendao-generator-encryption:2.2.0' ...

基于Sqlcipher和GreenDao的数据库加密

由于需要修改源码,所以无法再通过compile 'de.greenrobot:greendao:2.0.0'来引入依赖库,下载GreenDao代码: git clone https://github...

Android GreenDao使用总结(包括模型生成、增删改查、修改存储路径、数据库更新升级和加解密数据库)

前言:      在Android开发中,或多或少总要接触SQLite。然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等。所以,适用于 Android 的ORM 框架...

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

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

GreenDao的简单使用及混淆打包

关于android数据库框架,有很多种,各有各的优势。 先来看一个图 ,但对于批量查询操作,性能最优的莫过于greendao了。今天来说说关于它简单的使用方式。 配置gradle depen...
  • ddxxii
  • ddxxii
  • 2017-02-04 22:41
  • 1887

GreenDao3.1用法详解

greenDAO是一个对象关系映射(ORM)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便。 GreenDao 优点: 1.性能高,号称Andr...

GreenDao数据库结构升级

1.先用GreenDao工具类编写自动创建代码,按照升级后的最新数据库结构来编写 2.GreenDao工具自动生成的代码覆盖到项目里去 3.在项目里找到对应的自动生成的数据库DaoMaster类 在D...

greendao3.0以上使用步骤(二):数据库到底该怎么升级

数据库到底该怎么升级呢?看我升级后的效果 没有升级前的页面显示 没有升级前的数据库 升级后的页面显示升级后的数据库 看增加了一个NUM字段 。最新有小伙伴遇到数据库升级问题了,说网上都是2.0版本的升...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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