我的 cocoa 应用程序中有一个文件选择器,但是当您点击“选择”按钮时,我不相信它实际上存储或使用该文件。我稍后需要使用该文件对其进行加密。用户选择一个文件,在 NSSecureText 字段中输入密码。虽然如果我没有可使用的文件,这是不可能的,但我如何才能真正选择/使用文件?我需要使用该文件的内容进行加密(256 位 AES)。一旦我实际存储它,我将如何访问数据以对其进行加密。它不一定是文本文件,但也许是声音文件。
非常感谢您的帮助
最佳答案
如果我理解正确的话,您首先必须使用像 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/) 是您最好的 friend 。它也非常容易使用:
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"];
关于cocoa - 如何在 cocoa 应用程序中存储文件然后稍后访问它以加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6824880/