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