1

我已经完成了这个问题和类似的问题,但我仍然无法弄清楚这一点。

早些时候我SQLite用于我的android应用程序。预填充的 Sqlite数据库的大小约为 15 MB。我制作了一个临时的 android 应用程序,将我的记录复制到一个新的 Realm 数据库中。这个新的 Realm 数据库的大小约为 150 MB。然后我用Mac中的Realm浏览器打开它并压缩它。大小现在减少到 15 MB。

但是,如果我在创建新数据库并将sqlite行复制到其中时使用加密,则大小约为 150 MB。当我使用十六进制密码打开它时,它可以正常打开。然后我像之前一样压缩它-> 大小恢复到正常的 15 MB。但是,我不知道为什么,加密现在被删除了

为了解决这个问题,我只能想到一种解决方案。如果我可以对已经压缩的 Realm 数据库应用加密。但是,我想不通,如何在 Android 中做到这一点?

编辑 - 一些相关部分 -

第1部分 -

Realm.init(this);
byte[] key = new byte[64]; // Just for demonstration
RealmConfiguration config = new RealmConfiguration.Builder()
                .name("QBank.realm")
                .directory(getExternalFilesDir(null))
                .encryptionKey(key)
                .build();
Realm realm = Realm.getInstance(config);

第2部分 -

 @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.button_sqlite2realm:
                DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);
                databaseAccess.open();
                questionsList = databaseAccess.getAllQuestions();
                databaseAccess.close();

                Realm realm = Realm.getInstance(config);
                realm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        for (QuestionBank question : questionsList){
                            realm.copyToRealmOrUpdate(question);
                        }
                    }
                });
                break;
        }
    }

将加密数据库转换为压缩数据库->我从android模拟器中提取了这个领域数据库->在领域浏览器中打开它(使用十六进制密码)->压缩(但是这个新创建的压缩数据库现在没有加密)

PS - 我知道我的问题是描述性的,但我找不到办法做到这一点。

4

1 回答 1

0

我认为这个问题指向与您面临的相同问题。

压缩需要在数据中找到模式。加密消除了所有这些模式。

您需要在加密之前进行压缩。加密将您的数据转换为高熵数据,通常与随机流无法区分。压缩依赖于模式以获得任何尺寸减小。由于加密会破坏此类模式,因此如果将压缩算法应用于加密数据,则无法大幅减少大小。

让我知道任何其他帮助。

希望这会帮助你。编码快乐!!

于 2016-12-06T07:38:36.850 回答