2015-12-09 4 views
5

Я зашифровал базу данных Realm в своем приложении. Я хотел бы изменить ключ шифрования. Правильно ли это сделать, создавая копию файла Realm с новым ключом шифрования или имеется ли еще один доступный параметр?Обновление/изменение ключа шифрования Realm

Спасибо.

ответ

3

Да, вы должны сделать копию файла Realm с новым ключом шифрования. Метод называется writeEncryptedCopyTo(): https://realm.io/docs/java/latest/api/io/realm/Realm.html#writeEncryptedCopyTo-java.io.File-byte:A-

Что-то вроде ниже должно работать:

RealmConfiguration config1 = new RealmConfiguration.Builder(context) 
    .name("old-name") 
    .encryptionKey(getOldKey()) 
    .build() 

Realm realm = Realm.getInstance(config1); 
realm.writeEncryptedCopyTo(new File(context.getFilesDir(), "new-name"), getNewKey()); 
realm.close(); 

RealmConfiguration config2 = new RealmConfiguration.Builder(context) 
    .name("new-name") 
    .encryptionKey(getNewKey()) 
    .build() 
+0

Я хотел бы, чтобы моя база данных имя же, поэтому я пишу скопировать временный файл, а затем удалить исходный файл, а затем переименовать tmp-файл. Однако Realm использует кеш конфигурации на основе пути. Есть ли способ сбросить это? – Niko

+0

Плохо, не закрывал экземпляр царства достаточно рано, чтобы удалить его :) – Niko