DbFlow sqlcipher 加密存储

前言

在学习Dbflow的使用过程中,发现官方文档没有对其加密的方式进行说明,遂进行了总结
DbFlow可以通过加入sqlcipher来达到数据库加密功能,具体流程如下:

1. 导入相关数据

build.gradle

def dbflow_version = "4.2.4"
def sqlcipher_version = "3.5.9"

annotationProcessor "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}"
    compile "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}"
    compile "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}"
    compile "com.github.Raizlabs.DBFlow:dbflow-sqlcipher:${dbflow_version}" //加密必要
    compile "com.github.Raizlabs.DBFlow:dbflow-rx2:${dbflow_version}"
    compile "net.zetetic:android-database-sqlcipher:${sqlcipher_version}@aar" //加密必要
2. 构建数据库
@Database(name = TestDatabase.NAME, version = TestDatabase.VERSION)
public class TestDatabase {
    public static final String NAME = "TestDatabase";

    public static final int VERSION = 1;
}

3. 继承加密工具类,传入加密的key

作为测试,加密的key固定为32个0

public class SQLCipherHelperImpl extends SQLCipherOpenHelper {
    public SQLCipherHelperImpl(DatabaseDefinition databaseDefinition, DatabaseHelperListener listener) {
        super(databaseDefinition, listener);
    }

    /**
     * @return The SQLCipher secret for opening this database.
     */
    @Override
    protected String getCipherSecret() {
        byte[] key = new byte[32];
        Arrays.fill(key, (byte) 0);
        String input = new String(key);
        return input;
    }
}

4. 在自定义Application中初始化 Dbflow

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        FlowConfig flowConfig = FlowConfig.builder(this)
                .addDatabaseConfig(new DatabaseConfig.Builder(TestDatabase.class)
                        .openHelper(new DatabaseConfig.OpenHelperCreator() {
                            @Override
                            public OpenHelper createHelper(DatabaseDefinition databaseDefinition, DatabaseHelperListener helperListener) {
                                return new SQLCipherHelperImpl(databaseDefinition, helperListener);
                            }
                        })
                        .build())
                .build();
        FlowManager.init(flowConfig);
    }
}


在上述操作后,App通过Ddflow保存的数据都会加密

PS1: 实际使用中,数据库的加密key不应该使用固定的值,应该在App第一次运行时动态生成并使用

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,544评论 19 139
  • 这两天看跟菲利大叔学手绘 《创意速写》,总结下要点: 1,使用硬封面+无酸纸+线装的速写本。不一定需要太贵的,太贵...
    吖璃阅读 1,855评论 2 1
  • 上次能有空审视自己、打字疏解是大概一个多月前毛豆生病之时,这次是姥姥生病在守夜之时。 姥姥生病了,脑...
    雪野兔阅读 365评论 0 0
  • 我爱单身,单身爱我。 我与单身相恋多年,不离不弃。 我喜欢的第一个男生是我的小学同座,没长开的他是个特别软萌...
    不再抓你的手阅读 476评论 0 1
  • 小城灯火 PinkAsuu_小树 此刻坐在明亮的白炽灯下,望着它出神。我看到它清晰明亮的光浸洒着一寸一寸安静的空...
    PinkAsuu_树阅读 273评论 0 2

友情链接更多精彩内容