Попытка зашифровать NSDictionary при записи в файл - PullRequest
21 голосов
/ 05 мая 2011

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

В настоящее время я сохраняю файл, какэто:

NSFileManager* fileManager = [NSFileManager defaultManager];
if (!fileManager)
{
    NSLog(@"Failed to get file manager to save.");
    return;
}

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
NSString* filePath = [documentsDirectory stringByAppendingPathComponent:@"save.dic"];
[m_dictionary writeToFile:filePath atomically:YES];

И я загружаю словарь так:

NSArray*  paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
NSString* filePath = [documentsDirectory stringByAppendingPathComponent:@"save.dic"];
m_dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

Может кто-нибудь сказать мне хороший способ зашифровать \ расшифровать это?

CheersРич

1 Ответ

23 голосов
/ 05 мая 2011

Используйте NSKeyedArchiver для создания NSData объекта из вашего словаря ( NSKeyedArchiver archivedDataWithRootObject: ). Затем зашифруйте NSData с помощью AES и запишите это в свой файл.

Чтение происходит в обратном порядке: сначала прочитайте NSData, расшифруйте его с помощью метода из упомянутой ссылки, затем передайте расшифрованные NSData в NSKeyedUnarchiver ( NSKeyedUnarchiver unarchiveObjectWithData: ), и вы получите свой словарь обратно.

...