Шифрование основных данных с помощью MagicalRecord

Можно ли настроить уровень защиты файла SQLite, созданного для Core Data?

Мне нужно использовать на нем уровень NSFileProtectionComplete.

Любые идеи?


person Pedro Milanez    schedule 27.08.2013    source источник
comment
Вот вопрос (stackoverflow.com/questions/18365375/) по sqlcipher и волшебной записи. Может быть, это даст адекватное решение   -  person casademora    schedule 27.08.2013


Ответы (1)


Найдите строку, в которой вы делаете addPersistentStoreWithType:configuration:URL:options:

NSURL *storeURL = ...;

NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:...];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                              configuration:nil
                                                        URL:storeURL
                                                    options:nil
                                                      error:&error])
{
    NSLog(@"Add persistent store failed: %@", error);
}

Затем добавьте:

NSDictionary *attributes = @{NSFileProtectionKey: NSFileProtectionComplete};
if (![[NSFileManager defaultManager] setAttributes:attributes
                                      ofItemAtPath:path
                                             error:&error]) {
    NSLog(@"File protection failed: %@", error);
}

Имейте в виду, что вы не можете использовать базу данных в фоновом режиме, рассмотрите возможность использования NSFileProtectionCompleteUnlessOpen:

  • NSFileProtectionComplete: файл хранится на диске в зашифрованном формате и не может быть прочитан или записан, пока устройство заблокировано или загружается.
  • NSFileProtectionCompleteUnlessOpen: файл хранится на диске в зашифрованном формате. Файлы можно создавать, пока устройство заблокировано, но после закрытия их нельзя открыть снова, пока устройство не будет разблокировано. Если файл открывается в разблокированном состоянии, вы можете продолжить доступ к файлу в обычном режиме, даже если пользователь заблокирует устройство. При создании и открытии файла наблюдается небольшое снижение производительности, но не при записи или чтении из него. Это можно смягчить, изменив защиту файлов на NSFileProtectionComplete, когда устройство разблокировано.
person eik    schedule 27.08.2013
comment
Обратите внимание, что еще проще и рекомендуется просто включить защиту данных для всего приложения (при условии, что вы можете адаптироваться к проблемам фонового управления): stackoverflow.com/questions/18326225/fmdb-and-encryption/ - person Rob Napier; 27.08.2013
comment
Спасибо! Хотя я использую MagicalRecord, мне это помогло! :) - person Pedro Milanez; 05.09.2013