GreenDao Encrypt

本文介绍如何使用GreenDao实现数据库加密,以保护敏感数据。通过整合SQLCipher和GreenDao,可以为Android应用提供额外的安全保障。文章详细介绍了配置依赖、数据库初始化步骤及抽象层的使用。

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

内容概要:本文围绕基于CNN-Transformer混合模型的锂电池SOH(State of Health,健康状态)预测估计展开研究,提出一种融合卷积神经网络(CNN)与Transformer架构的深度学习方法,用于精准建模电池容量衰退过程。该方法充分发挥CNN在局部特征提取方面的优势以及Transformer在捕捉长时间序列依赖关系上的强大能力,有效提升了锂电池健康状态预测的准确性与稳定性。研究内容涵盖数据预处理、模型结构设计、训练优化流程及预测结果可视化等关键环节,适用于电池退化趋势分析与剩余使用寿命(RUL)评估,具有较强的工程应用价值。; 适合人群:具备Python编程能力和深度学习理论基础的高校研究生、科研人员及从事新能源电池管理系统开发的工程技术人才,特别适合聚焦于锂电池寿命预测、故障诊断与健康管理等方向的研究者。; 使用场景及目标:①掌握CNN与Transformer在时间序列回归任务中的协同建模机制;②实现高精度锂电池SOH预测模型构建与训练;③服务于电动汽车续航管理、储能系统运维决策与电池老化特性分析;④支持学术论文复现、科研项目验证及工业级电池管理算法开发。; 阅读建议:此资源以代码实践为核心驱动,建议读者结合所提供的完整Python代码进行动手实现,深入理解模型各模块的设计逻辑与训练技巧,并可通过调整网络结构或引入新数据集进一步拓展至其他时序预测任务中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值