Cocoa加密纯文本



我正在开发一个加密应用程序,该应用程序目前可以加密纯文本文件。我需要一些关于连接和如何进行实际加密的帮助。我收到了这段加密文件的代码,但我有点困惑。我需要做的是有一个按钮(加密)来获取这个文本文件并加密它。我应该先提取文件的内容,然后加密它吗?为什么呢程序必须知道选择了什么文件,这样它才能对其进行加密,而我现在是个十足的傻瓜,我需要一些帮助。

将非常感谢循序渐进的指导。

这是代码:

- (NSData*) encryptString:(NSString*)plaintext withKey:(NSString*)key {
    return [[plaintext dataUsingEncoding:NSUTF8StringEncoding] AES256EncryptWithKey:key];
}

我用以下代码段实现了一个文件选择器:

- (IBAction)fileChooser:(id)sender {
    int i;
    NSOpenPanel* openDlg = [NSOpenPanel openPanel];
    [openDlg setCanChooseFiles:YES];
    [openDlg setCanChooseDirectories:YES];
    [openDlg setPrompt:@"Select"];
    if ([openDlg runModalForDirectory:nil file:nil] == NSOKButton )
    {
        NSArray* files = [openDlg filenames];
        for( i = 0; i < [files count]; i++ )
        {
            [files objectAtIndex:i];
        }
    }
}

这是代码:

- (NSData*) encryptString:(NSString*)plaintext withKey:(NSString*)key {
    return [[plaintext dataUsingEncoding:NSUTF8StringEncoding] AES256EncryptWithKey:key];
}

首先,查看AES256EncryptWithKey:消息的接收方。这是另一条嵌套消息:

[plaintext dataUsingEncoding:NSUTF8StringEncoding]

什么是plaintext?它在您的encryptString:withKey:方法中声明:它是一个变量,包含指向NSString的指针。

因此,您正在向NSString实例发送dataUsingEncoding:消息。

如果您打算加密一些纯文本用户输入,这是很好的,但对于加密文件来说就不那么好了。NSString只代表人类字符;用户可能想要加密非纯文本的文件,例如图像和视频文件。

我知道你说过你的应用程序"目前只加密文本文件",但当你放弃这个限制时,解决方案实际上更简单

因此,您需要加密任何数据,而不仅仅是字符串。删除您的encryptString:withKey:方法--它是无用的。

从该后期方法的实现中,我们知道您将AES256EncryptWithKey:发送到通过将dataUsingEncoding:发送到NSString实例而获得的对象。

如果您查看NSString的文档,您可以看到dataUsingEncoding:返回了什么。扰流板:它返回一个NSData对象。

从那里,只需一个指向NSData文档的超链接,您就可以在其中找到两件事:

  1. 它没有选择器AES256EncryptWithKey:的方法
  2. 它确实有从文件内容创建数据对象的方法。(我会让你找到它们。)

我假设您知道#1,并从某处下载了一个类别实现。我还假设,事实上,这个类别是NSData上的;类别的@interface在其标题中会告诉您。

在Objective-C中,您不应该使用索引循环来遍历数组,除非您确实需要某些东西的索引,而您通常不需要,特别是不需要。相反,使用快速枚举:

for (NSString *path in [openPanel filenames]) {
}

您可以再次看到这是如何使解决方案更简单的。它也更快。

在该循环中,将该路径传递给NSData类方法,该方法根据文件的内容创建NSData对象。然后,向该数据对象发送AES256EncryptWithKey:消息以获得密文,您可能应该将其写入一个单独的文件。我将向您介绍计算输出文件路径所需的路径操作方法的NSString文档,以及将密文数据写入输出文件所需的方法的NSData文档。

相关内容

  • 没有找到相关文章

最新更新