данные шифрования iphone sqlite - PullRequest
0 голосов
/ 02 марта 2011

Я создал одно приложение для малого бизнеса. В своем приложении я использовал базу данных sqlite для хранения данных. Здесь я решил использовать метод шифрования с использованием инфраструктуры безопасности. Я знаю о sqlite, но я не знаю, как реализовать sqlite. метод шифрования ... Пожалуйста, наведите меня ....

Ответы [ 2 ]

2 голосов
/ 20 июня 2014

Принятый ответ Шейна Пауэлла неверен.

Установка NSFileProtectionComplete для NSFileProtectionKey после addPersistentStoreWithType: configuration: URL: options: error: не действует, т.е.применяется параметр по умолчанию (NSFileProtectionCompleteUntilFirstUserAuthentication), который менее безопасен.

Правильный подход - установить NSFileProtectionComplete для NSPersistentStoreFileProtectionKey (обратите внимание, что этот ключ относится к постоянному хранилищу в)словарь передан для параметра параметров ...

NSDictionary *fileAttributes = @{NSPersistentStoreFileProtectionKey : NSFileProtectionComplete};

 if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:fileAttributes error:&error]) {
    ...

Я проверил это с помощью PhoneView и смог получить доступ к SQLite на заблокированном устройстве после начальной разблокировки, используя подход принятого ответа,но я не смог получить доступ к SQLite на заблокированном устройстве после первоначальной разблокировки, используя предложенный мной подход.

1 голос
/ 02 марта 2011

Вы используете функцию NSFileProtectionComplete (она доступна только в ios 4 и более поздних версиях).

Вот пример создания NSPersistentStoreCoordinator для example.sqlite, который шифруется при использовании на ios4.

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }

    NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"example.sqlite"];
    NSURL *storeUrl = [NSURL fileURLWithPath:storePath ];

    NSError *error = nil;
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
        // Handle error
    }

    if(RSRunningOnOS4OrBetter())
    {
        NSDictionary *fileAttributes = [NSDictionary dictionaryWithObject:NSFileProtectionComplete forKey:NSFileProtectionKey];
        if (![[NSFileManager defaultManager] setAttributes:fileAttributes ofItemAtPath:storePath error:&error]) {
            // Handle error
        }
    }

    return persistentStoreCoordinator;
}

BOOL RSRunningOnOS4OrBetter(void) {
    static BOOL didCheckIfOnOS4 = NO;
    static BOOL runningOnOS4OrBetter = NO;

    if (!didCheckIfOnOS4) {
        NSString *systemVersion = [UIDevice currentDevice].systemVersion;
        NSInteger majorSystemVersion = 3;

        if (systemVersion != nil && [systemVersion length] > 0) { //Can't imagine it would be empty, but.
            NSString *firstCharacter = [systemVersion substringToIndex:1];
            majorSystemVersion = [firstCharacter integerValue];         
        }

        runningOnOS4OrBetter = (majorSystemVersion >= 4);
        didCheckIfOnOS4 = YES;
    }
    return runningOnOS4OrBetter;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...