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不兼容

相关文章推荐

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

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

基于Sqlcipher和GreenDao的数据库加密

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

免费SSL证书Let's Encrypt(certbot)安装使用教程

https://www.vpser.net/build/letsencrypt-certbot.html Let's Encrypt是很火的一个免费SSL证书发行项目,自动化发行...

T5WTPYAFGP - Encrypt Sensitive Information

At South by Southwest this year, during my talk Defense Against The Dark Arts - ESAPI I covered ...

80、443 端口无法使用时使用 Let’s Encrypt 签发证书

Let ’ s Encrypt 自从公测以来,就唤起了各路开发者的兴趣,第三方自动化脚本也是雨后春笋般出现。但是 Let ’ s Encrypt 与其它 CA 签发证书时验证域名所有权不太相同,它使用...

Using SQLCipher to encrypt sqlite db (for iOS)

1. Follow the steps in http://sqlcipher.net/ios-tutorial/     Hints:     *  DELETE existing sq...

使用Go和Let's Encrypt证书部署HTTPS

为什么要使用HTTPS?使用HTTPS的途径有哪些?如何用Go来部署HTTPS?拿出你的小本本,你要的干货都在这儿!

openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及例子

openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及例子     ---根据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay...

Netcraft报告: let's encrypt和Comodo发布成千上万的网络钓鱼证书

Netcraft调查显示,2017年1季度发现数以万计的有效SSL证书颁发给具有明显网络钓鱼和诈骗意图的域名,其中由let's encrypt和Comodo发布的免费SSL证书占到了96%。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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