0

问题:当我尝试在Realm Browser(Windows)中打开加密领域文件时,它给了我以下消息。

这要么不是 Realm 文件,要么是加密的。

输入:128 个字符的十六进制编码的加密密钥

重要- 我在保存到磁盘之前关闭我的领域。

代码

RealmConfiguration config = new RealmConfiguration.Builder()
            .name("w5uyqFyEDEK_OCWyl4123aa77")
            .schemaVersion(2)
            .encryptionKey(myClassObject.getRealmKey())
            .deleteRealmIfMigrationNeeded()
            .build();

方法

 public byte[] getRealmKey() {
    byte[] key;
    String savedKey = getStringFromPrefs(KEY);
    if (savedKey.isEmpty()) {
        key = generateKey();
        String keyString = encodeToString(key);
        saveStringToPrefs(keyString);
    } else {
        key = decodeFromString(savedKey);
    }
    return key;
}



 private void saveStringToPrefs(String aKeyString) {
    pref.edit().putString(KEY, aKeyString).apply();
}

private String encodeToString(byte[] aKey) {
    AppLogger.d("Encoding Key: %s", Arrays.toString(aKey));
    return Base64.encodeToString(aKey, Base64.DEFAULT);
}

private byte[] decodeFromString(String aSavedKey) {
    byte[] decoded = Base64.decode(aSavedKey, Base64.DEFAULT);
    AppLogger.d("Decoded Key: ", Arrays.toString(decoded));
    return decoded;
}

private byte[] generateKey() {
    byte[] key = new byte[64];
    new SecureRandom().nextBytes(key);
    return key;
}

我尝试使用key存储在打开加密领域文件preferencebyte[] decodedKey但仍然无法打开领域文件。

我在这里错过了什么吗?

4

1 回答 1

3

您需要对您的加密密钥进行十六进制编码,而不是 Base64 编码。

你可以在这里看到如何做到这一点:https ://github.com/realm/realm-java/pull/5571

于 2017-11-27T09:41:01.173 回答