cocoa 加密明文?

标签 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];

        }

    }
}

最佳答案

This was the code:

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

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

[plaintext dataUsingEncoding:NSUTF8StringEncoding]

什么是明文?它在您的 encryptString:withKey: 方法中声明:它是一个保存指向 NSString 的指针的变量。

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

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

我知道您说过您的应用程序“目前加密纯文本文件”,但当您放弃此限制时,解决方案实际上更简单。

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

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

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

从那里,只需一个超链接即可到达 the NSData documentation ,你会发现两件事:

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

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

在 Objective-C 中,你不应该使用索引循环来迭代数组,除非你确实需要某些东西的索引,而你通常不需要,特别是你也不需要。相反,使用 fast enumeration :

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

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

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

关于 cocoa 加密明文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6487710/

相关文章:

objective-c - 如何构建一个 Objective-C 静态库?

cocoa - 不使用页面设置进行打印 - 对纸张尺寸和方向的变化有何 react ?

file - CRC32真的对文件完整性检查不好吗?

c# - java 中的错误填充异常(RSA 解密)

objective-c - 如何在objective-C cocoa中显示带有 "Select file"的窗口

objective-c - 如何在 Cocoa 中将过滤器应用于 NSArrayController 后从 NSArray 获取值

java - 与按需执行文件查找相比,什么时候在初始化时从文件加载所有数据更好? ( java )

node.js - 将原始图像转换为缓冲区

shadow - 是否可以解密影子文件?

php - 为什么 PHP/MySQL 会选择性地对一个特定的 AES 字符串解密失败?