2016-12-05 61 views
1

我已经通过this问题和类似的问题,但我仍然无法弄清楚这一点。如何将加密应用于Android中的现有领域数据库?

早些时候我使用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); 

部分 -

@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模拟器的数据库 - >在Realm浏览器中打开它(使用十六进制密码) - >压缩(但是这是新的创建的压缩数据库现在不加密)

P.S. - 我知道我的问题是描述性的,但我找不到一种方法来做到这一点。

+0

你关闭你的领域数据库?如果可能的话分享你的代码复制? –

+0

对不起,我没有得到你。你是指从'sqlite'复制到'realm'或从加密到压缩的代码? –

+0

@PravinD,我已经更新了我的问题,并提供了相关信息。 –

回答

0

我认为this question指向你面对的同样的问题。

压缩需要查找数据中的模式。加密删除 所有这些模式。

您需要在加密前进行压缩。 加密将您的数据转换为高熵数据,通常与随机流无法区分。压缩依赖于模式以获得任何尺寸减小。由于加密破坏了这种模式,因此如果将其应用于加密数据,则压缩算法无法使您的体积减小很多。

让我知道任何其他帮助。

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

相关问题