如何在cocoa应用程序中存储文件,然后再访问它进行加密

时间:2011-07-26 03:21:18

标签: cocoa file macos encryption aes

我的cocoa应用程序中有一个文件选择器,但是当你点击“选择”按钮时我不相信它实际存储或使用该文件。我需要稍后使用该文件来加密它。用户选择文件,在NSSecureTextfield中输入密码。虽然如果我没有文件可以使用,这是不可能的,但我如何才能实际选择/使用文件?我需要用该文件的内容加密(256位AES)。一旦我实际存储它,我将如何访问数据来加密它。它不一定是文本文件,但可能是一个声音文件。

非常感谢你的帮助

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您首先必须使用类似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框架(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"];