Реализация формата файла, который будет использоваться с Шифрованием - Какао - PullRequest
0 голосов
/ 10 ноября 2011

Мне нужно внедрить соли в моё шифрование, но для этого мне нужно сохранить его в формате файла, который мне нужно создать, чтобы позже я мог получить его для расшифровки. Я нуб, когда дело доходит до шифрования. Спецификации формата файла должны быть такими:

Зашифрованный текст: длина зашифрованного текста; Соль: длина соли;

Тогда зашифрованный текст и соль выписаны. Это то, где xcode действительно смущает меня, например, при создании нового файла и т. Д.

Как я могу это сделать? А потом извлечь соль для расшифровки?

Спасибо, ваша помощь очень ценится.

1 Ответ

1 голос
/ 10 ноября 2011

Вы можете рассмотреть возможность использования NSMutableDictionary и NSKeyedUnarchiver следующим образом:

// Example ciphertext and salt
NSString *ciphertext = @"the ciphertext";
NSString *salt = @"the salt";

// File destination
NSString *path = @"/Users/Anne/Desktop/Archive.dat";

// Create dictionary with ciphertext and salt
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:ciphertext forKey:@"ciphertext"];
[dictionary setObject:salt forKey:@"salt"];

// Archive dictionary and write to file
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dictionary];
[data writeToFile:path options:NSDataWritingAtomic error:nil];

// Read file and unarchive
NSMutableDictionary *theDictionary = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

// Get ciphertext and salt
NSString *theCiphertext = [theDictionary objectForKey:@"ciphertext"];
NSString *theSalt = [theDictionary objectForKey:@"salt"];

// Show Result
NSLog(@"Extracted ciphertext: %@",theCiphertext);
NSLog(@"Extracted salt: %@",theSalt);

Выход:

Extracted ciphertext: the ciphertext
Extracted salt: the salt

EDIT

Ответ на комментарий: NSData и NSString функция length.

Быстрый пример:

NSString *theString = @"Example String";
NSData *theData = [theString dataUsingEncoding:NSUTF8StringEncoding];

NSUInteger stringLength = [theString length];
NSUInteger dataLength = [theData length];

NSLog(@"String length: %ld",stringLength);
NSLog(@"Data length: %ld",dataLength);

Выход:

String length: 14
Data length: 14
...