在Realm中注销错误加密密钥的用户

时间:2017-08-07 11:00:19

标签: android encryption realm local-storage realm-migration

我在Android应用中使用Realm database。数据需要加密,我正在使用Realm的加密。它们的密钥来自服务器,然后存储在设备上,但使用用户密码加密。

我想注销用户 - 如果 - 无论如何 - 键是调和的。我正在使用ParentActivity类进行一些常规初始化,并尝试在onCreate内部执行此操作,如下所示,

private void initRealm() {
    try {
        if(MyApplication.getInstance().isRelamInitialized)
            realm = Realm.getDefaultInstance();
    } catch (IllegalStateException e) {
        e.printStackTrace();
        deleteAllAndLogout();
    }

}

deleteAllAndLogout如下所示,

public void deleteAllAndLogout() {
    session.logoutUser();
    session.removeFbData();
    RealmManager.deleteAll(realm);
    LoginManager.getInstance().logOut();
    Intent intent = new Intent(this, LoginActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);
    finish();
}

问题

  • Realm尚未初始化,那么在没有realm初始化的情况下如何清除数据?

  • 当我测试它时,它一次又一次地开始LoginActivity并且从未停止过。

我正在Realm课程中初始化Application

public void initRealm() {
    String encryptedKey = new Session(getApplicationContext()).getStringForKey(Session.mainEncryptedKeyForEncryption);
    String key = new Cipher(getApplicationContext()).decrypt(encryptedKey);

    Realm.init(getApplicationContext());
    config = new RealmConfiguration
            .Builder()
            .encryptionKey(key.getBytes())
            .deleteRealmIfMigrationNeeded()
            .name(DB_NAME)
            .schemaVersion(DB_VERSION)
            .build();

    Realm.setDefaultConfiguration(config);
    isRelamInitialized = true;

}

问题

如果Realm未正确解密,我将如何以及在何处删除所有本地数据和注销用户?

1 个答案:

答案 0 :(得分:0)

如果您尝试使用错误的加密密钥打开Realm文件,Realm将抛出RealmFileException

因此,您需要将所有调用包装到Realm.getDefaultInstance(),捕获异常并在发生时将用户注销。