带有WriteToFile的NSDataWritingFileProtectionComplete不加密数据

时间:2015-02-15 21:32:33

标签: objective-c nsdata writetofile

我听说我们可以加密将它们转换为NSData的文档,并使用WriteToFile方法写入目录,我实现了以下测试:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"confidencial"];

    NSString *content = @"This message is confidential password number is xxxxxxxxxxxx!";

    NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];

[data writeToFile:fileName options:NSDataWritingFileProtectionComplete error:nil];

文件保存在我的文档目录中,文档说明了命令 NSDataWritingFileProtectionComplete

  

具有此设置的任何文件在设备后十秒受到保护   锁住了。这是最高级别的保护。用这个文件   您的程序在运行时可能无法使用设置   背景。当设备解锁时,这些文件不受保护。

要检查是否为真,我将我的设备(模拟器)锁定到我的文档目录并打开文件,我惊讶地看到了这条消息:

  

此消息为机密密码,为xxxxxxxxxxxx!

为什么没有加密?

1 个答案:

答案 0 :(得分:1)

您使用NSData对字符串进行编码。编码不是加密。有区别。如果您想要真正的加密,那么您将不得不考虑使用OSX的加密服务。

但是如果你只是想让字符串不容易阅读(模糊它),那么在转换为NSData时你可以做类似的事情。请注意,这根本不安全。

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:content];

当您想要将数据读回应用程序时,您将文件作为数据对象读回,然后将数据对象转换回NSString,如下所示:

NSString *content = [NSKeyedUnarchiver unarchiveObjectWithData:data];

这不是加密,但它应该模糊字符串,使得某人很难从保存的文件中读取它。