2011-05-05 14 views
21

Actualmente estoy guardando un NSDictionary en el archivo en el dispositivo iOS. Sin embargo, los archivos NSDictionary son legibles en XML. No quiero que las personas puedan entrar y leer los contenidos, así que tengo que poder encriptar el archivo al escribirlo y descifrarlo cuando vuelva a cargarlo.Intentando encriptar un NSDictionary al escribir en el archivo

Actualmente estoy guardando el archivo como esto:

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]; 

Y estoy cargando el diccionario como esto:

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

Alguien me puede dar una buena manera de cifrar \ descifrar este ?

Saludos, Rich

Respuesta

24

Utilice un NSKeyedArchiver para crear un objeto NSData de su diccionario (NSKeyedArchiver archivedDataWithRootObject:). Luego encrypt the NSData with AES y escríbalo en tu archivo.

La lectura toma el reverso: primero, lea el NSData, descifrelo mediante el método del enlace mencionado, luego pase el NSData descifrado a NSKeyedUnarchiver (NSKeyedUnarchiver unarchiveObjectWithData:) y recupere su diccionario.

+0

Ah fantástico. Lo miraré. Gracias por la rápida respuesta. –

+1

@DarkDust [NSKeyedUnarchiver unarchiveObjectWithData: someArchivedDictionary] que devuelve la instancia de NSData en lugar de NSMutableDictionary. Estoy siguiendo los pasos que sugirió: Archivar -> Cifrar con AES -> Almacenar en archivo -> Leer desde archivo -> Descifrar con AES -> Desarchivar. Alguna idea de lo que podría ser el problema? Si lo solicita, puedo publicarlo como una nueva pregunta. –

+0

hermosa, gran respuesta! –

Cuestiones relacionadas