Как сохранить файл в приложении какао, а затем получить доступ к нему для шифрования - PullRequest
1 голос
/ 26 июля 2011

У меня есть селектор файлов в моем приложении какао, но когда вы нажимаете кнопку «Выбрать», я не верю, что он фактически сохраняет или использует этот файл. Мне нужно использовать этот файл позже, чтобы зашифровать его. Пользователь выбирает файл, вводит пароль в поле NSSecureText. Хотя это невозможно, если у меня нет файла для работы, как я могу НАСТОЯЩИЙ выбрать / использовать файл? Мне нужно зашифровать (256-битный AES) с содержимым этого файла. Как только я действительно сохраню это, как я получу доступ к данным, чтобы зашифровать это. Это не обязательно будет текстовый файл, но, возможно, звуковой файл.

Большое спасибо за вашу помощь

1 Ответ

2 голосов
/ 26 июля 2011

Если я правильно вас понимаю, вам сначала нужно будет использовать класс, такой как NDAlias ​​(https://github.com/nathanday/ndalias), для создания «динамической» ссылки на ваш файл. Это ссылка, которая будет сохраняться, даже если файлтем временем переименовывается или перемещается (на том же томе). Его очень легко использовать:

//store the alias
NDAlias *alias = [NDAlias aliasWithPath:pathToYourFile
                               fromPath:NSHomeDirectory()];

//do whatever you want

//later, restore the path (possibly the path has changed)
NSString *path = [alias path];

Примечание: Если вы хотите просто прочитать содержимое файла сразубез выполнения каких-либо действий, конечно же, NDAlias ​​вообще не нужен.

Чтобы прочитать данные из файла, вы просто делаете:

NSData *data = [NSData dataWithContentsOfFile:path];

Чтобы выполнить AES-256шифрование, SSCrypto Framework (http://septicus.com/products/opensource/) - ваш лучший друг. Его также очень легко использовать:

NSString *somePassword = @"somePassword"
NSData *passwordData = [somePassword dataUsingEncoding:NSUTF8StringEncoding];

SSCrypto *sscrypto = [[SSCrypto alloc] initWithSymmetricKey:passwordData];
[sscrypto setClearTextWithData:data];

NSData *encryptedData = [sscrypto encrypt:@"aes-256-cbc"];

. И для расшифровки этих данных вы делаете следующее:

NSString *somePassword2 = @"theSamePassword"
NSData *passwordData2 = [somePassword2 dataUsingEncoding:NSUTF8StringEncoding];

SSCrypto *sscrypto2 = [[SSCrypto alloc] initWithSymmetricKey:passwordData2];
[sscrypto2 setCipherText:encryptedData];
NSData *decryptedData = [sscrypto2 decrypt:@"aes-256-cbc"];
...