cocoa - 如何在 cocoa 应用程序中存储文件然后稍后访问它以加密

标签 cocoa file macos encryption aes

我的 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/

相关文章:

ios - iOS 上的 NSXMLParser,我如何在给定 xml 文件的情况下使用它

cocoa - 在 AppleScript 中检测 Safari 私密浏览

java - 当我尝试在驱动器中搜索时程序抛出 NullPointerException?

swift - Mac 托盘应用程序的全局键盘快捷键

objective-c - 如何防止 OS X 文本布局引擎自动使用从右到左的文本 "flipping"行?

mysql - 将文件内容插入 MySQL 表的列

Javascript:按文件路径比较两个选定的文件

macos - gnuplot pdfcairo 未命名的 Type 3 字体在 macos 上的输出中

macos - OSX 上的 XAMPP 默认文件夹

swift - 如何在自定义 View (视网膜)中以恒定的强度绘制一条线?