Cocoa加密纯文本?

时间:2011-06-27 00:44:16

标签: cocoa file encryption aes

我正在开发一个加密应用程序,现在加密纯文本文件。我需要一些关于连接的帮助以及如何进行实际加密。我收到了这段代码来加密文件,但我有点困惑。我需要做的是有一个按钮(加密),它接受这个文本文件并加密它。我应该首先提取文件的内容,然后加密吗?怎么会这样?程序必须知道选择了哪个文件,所以它加密它,我现在是一个完整的菜鸟,我需要一些帮助。

将非常感谢分步说明。

这是代码:

- (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];

        }

    }
}

1 个答案:

答案 0 :(得分:1)

  

这是代码:

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

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

[plaintext dataUsingEncoding:NSUTF8StringEncoding]

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

因此,您要将dataUsingEncoding:消息发送到NSString实例。

如果您打算加密某些纯文本用户输入,那就好了,但加密文件并不是那么好。 NSStrings只是人类的角色;用户可能希望加密非纯文本文件,例如图像和视频文件。

我知道你说你的应用程序“现在加密纯文本文件”,但是当你抛弃这个限制时,解决方案实际上更简单。

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

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

如果您查看the documentation for NSString,则可以看到what dataUsingEncoding: returns。 Spoiler:它返回一个NSData对象。

从那里开始,它是the NSData documentation的一个超链接,你可以在那里找到两件事:

  1. 选择器AES256EncryptWithKey:没有方法。
  2. 它确实有从文件内容创建数据对象的方法。 (我会让你找到它们。)
  3. 我假设您知道#1,并从某个地方下载了类别实现。我也假设,事实上,NSData上的这个类别;该标题中的类别@interface会告诉您。

    在Objective-C中,你不应该使用索引循环来遍历一个数组,除非你真的需要某个东西的索引,你通常不会这样,而你,特别是不需要。相反,请使用fast enumeration

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

    您可以再次看到这使得解决方案变得更简单。它也更快。

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