【问题标题】:Realm database decryption failed领域数据库解密失败
【发布时间】:2017-11-27 06:34:36
【问题描述】:

问题:当我尝试在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;
}

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

我错过了什么吗?

【问题讨论】:

    标签: android encryption realm realm-java


    【解决方案1】:

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

    您可以在此处查看操作方法:https://github.com/realm/realm-java/pull/5571

    【讨论】:

    • 有没有办法捕捉错误,Realm 文件解密失败。当解密密钥不可用并且 Realm 抛出此错误时,可能会有很大的机会。如何捕获此错误并删除现有领域并使用新的加密密钥创建一个新领域。为了进行测试,我已将领域密钥存储在共享首选项中,并在初始化领域对象之前在应用程序类中获取加密密钥。但有时,我得到的密钥是不同的、null 或空的,Realm 会抛出错误。这种情况该如何处理?
    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多