Есть ли какой-либо способ удалить шифрование из существующей базы данных Realm?

#encryption #realm

#шифрование #realm

Вопрос:

Мы используем версию Realm на Objective-C, версию 2.0.2. База данных в настоящее время зашифрована и находится в поле.

Периодически происходят сбои при запуске Realm с сообщением об ошибке «Невозможно открыть Realm в path … Сбой расшифровки файла Realm «. Мы используем последнюю доступную версию Realm и не смогли найти решение.

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

Ответ №1:

Вы можете использовать writeCopyToURL:encryptionKey:error: с nil ключом шифрования для записи незашифрованной копии, а затем переместить ее поверх исходного файла:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    RLMRealmConfiguration *confg = [[RLMRealmConfiguration alloc] init];
    config.encryptionKey = ...;
    NSURL *tempUrl = [NSURL URLWithString:[NSTemporaryDirectory() stringByAppendingPathComponent:"temp.realm"]];

    // Open the Realm within an autoreleasepool so that it's closed before we try
    // to overwrite the original file
    @autoreleasepool {
        RLMRealm *realm = [RLMRealm realmWithConfiguration:config error:nil];
        [realm writeCopyToURL:tempUrl encryptionKey:nil error:nil];
    }

    [[NSFileManager defaultManager] moveItemAtURL:tempUrl toURL:config.fileUrl error:nil];

    // ... other didFinishLaunchingWithOptions things ...

    return YES;
}
  

Комментарии:

1. Спасибо — это похоже на то, что нам нужно. Я отвечу, насколько хорошо это работает, если мы решим пойти по этому пути.

2. @user3768135 чувак, прошло более 5 лет. Что произошло?