Как безопасно хранить базу данных SQLite в iphone ..? - PullRequest
2 голосов
/ 02 марта 2012

У меня есть база данных SQLite, которая содержит конфиденциальную информацию.Так что меня беспокоит то, как я могу сохранить его на iPhone, чтобы он был безопасным и хакеры не могли получить к нему доступ.Я изучил аппаратное шифрование, предоставляемое ipad, но не смог понять, как его использовать. Любая помощь приветствуется ...

Ответы [ 3 ]

2 голосов
/ 02 марта 2012

Вы можете взглянуть на различные подходы для решения вашей проблемы.

  • Шифрование значений, хранящихся в CoreData с использованием md5 + salt шифрования.Вы можете сгенерировать специальный ключ, основанный на UUID пользовательского устройства и некоторой дополнительной «соли» для хранения данных.Будьте осторожны, в будущем Apple собирается преуменьшить значение персонализации устройств.Но с другой стороны, вы можете получить специальный ключ путем аутентификации пользователя и получения этого ключа из пост-запроса.Для шифрования вы можете использовать встроенный фреймворк: #import <CommonCrypto/CommonDigest.h>.Есть много примеров, которые вы можете найти в Интернете.

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

РЕДАКТИРОВАТЬ: Это пример кода, который вы можете использовать для получения зашифрованных данных MD5: Это файл .h

#import <Foundation/Foundation.h>

@interface NSString (MyExtensions)
- (NSString *) md5;
@end

@interface NSData (MyExtensions)
- (NSString *)md5;
@end

это файл .m:

#import "MyExtensions.h" //here should be your .h file name
#import <CommonCrypto/CommonDigest.h> // Need to import for CC_MD5 access

@implementation NSString (MyExtensions)
- (NSString *) md5
{
    const char *cStr = [self UTF8String];
    unsigned char result[16];
    CC_MD5( cStr, strlen(cStr), result ); // This is the md5 call
    return [NSString stringWithFormat:
            @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
            result[0], result[1], result[2], result[3], 
            result[4], result[5], result[6], result[7],
            result[8], result[9], result[10], result[11],
            result[12], result[13], result[14], result[15]
            ];  
}
@end

@implementation NSData (MyExtensions)
- (NSString *)md5
{
    unsigned char result[16];
    CC_MD5( self.bytes, self.length, result ); // This is the md5 call
    return [NSString stringWithFormat:
            @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
            result[0], result[1], result[2], result[3], 
            result[4], result[5], result[6], result[7],
            result[8], result[9], result[10], result[11],
            result[12], result[13], result[14], result[15]
            ];  
}
@end

Поэтому, если вы включите эти файлы в любое место вашего кода, вы можете просто вызвать эту функцию:

NSString *myStringToEncrypt = @"Confidential information";
NSString *myMD5 = [myStringToEncrypt md5];

Кстати: вы должны знать, что Функция MD5 - это просто хеш-функция, которая возвращает вам контрольную сумму данных.Если вы хотите шифровать , вы можете взглянуть на AES256 метод шифрования.CommonCrypto также предоставляет это.Подход зависит от ваших целей.

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

Вы можете использовать http://sqlcipher.net/ (SQLLite с шифрованием AES) - но это имеет некоторые серьезные последствия (ограничения на экспорт и не интегрируется с CoreData).

0 голосов
/ 02 марта 2012

Я думаю, вы можете создать защищенный паролем zip-файл вашей базы данных.Вы можете распаковать его, когда вам это нужно.

...