Есть ли способ отловить ошибку, Ошибка расшифровки файла Realm. Там может быть большой шанс, когда ключ дешифрования недоступен, и Царство выдает эту ошибку. Как отловить эту ошибку и удалить существующую область и создать новую с новым ключом шифрования. Для тестирования я сохранил ключ области в общих настройках и получил ключ шифрования в классе приложения перед тем, как инициализировать объект области. Но иногда ключ, который я получаю, является другим, или нулевым, или пустым, и Царство выдает ошибку. Как справиться с этой ситуацией?
с : Когда я пытаюсь открыть зашифрованный файл области вRealm Browser
(окна), и это дает мне следующее сообщение.
Либо это не файл 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
Хранится вpreference
а такжеbyte[] decodedKey
но я все еще не могу открыть файл области.
Я что-то здесь упускаю?