我正在开发一个加密应用程序,现在加密纯文本文件。我需要一些关于连接的帮助以及如何进行实际加密。我收到了这段代码来加密文件,但我有点困惑。我需要做的是有一个按钮(加密),它接受这个文本文件并加密它。我应该首先提取文件的内容,然后加密吗?怎么会这样?程序必须知道选择了哪个文件,所以它加密它,我现在是一个完整的菜鸟,我需要一些帮助。
将非常感谢分步说明。
这是代码:
- (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];
}
}
}
答案 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的一个超链接,你可以在那里找到两件事:
AES256EncryptWithKey:
没有方法。我假设您知道#1,并从某个地方下载了类别实现。我也假设,事实上,NSData上的这个类别是;该标题中的类别@interface
会告诉您。
在Objective-C中,你不应该使用索引循环来遍历一个数组,除非你真的需要某个东西的索引,你通常不会这样,而你,特别是不需要。相反,请使用fast enumeration:
for (NSString *path in [openPanel filenames]) {
}
您可以再次看到这使得解决方案变得更简单。它也更快。
在该循环中,将该路径传递给NSData类方法,该方法根据文件内容创建NSData对象。然后,将该AES256EncryptWithKey:
消息发送给该数据对象以获取密文,您应将其写入单独的文件中。我将向您介绍NSString文档,了解计算输出文件路径所需的路径操作方法,以及将密文数据写入输出文件所需的方法的NSData文档。 / p>