NSDataWritingFileProtectionComplete 与 WriteToFile 不加密数据

NSDataWritingFileProtectionComplete with WriteToFile not encrypt the data

听说可以加密文档转成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:

Any file with this setting is protected ten seconds after the device is locked. This is the highest level of protection. Files with this setting may not be available when your program is running in the background. When the device is unlocked, these files are unprotected.

为了检查是否属实,我锁定了我的设备(模拟器),转到我的文档目录并打开文件,令我惊讶的是我可以阅读消息:

This message is confidential password number is xxxxxxxxxxxx!

为什么没有加密?

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

的加密服务

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

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:content];

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

NSString *content = [NSKeyedUnarchiver unarchiveObjectWithData:data];

这不是加密,但它应该隐藏字符串,使其他人难以从保存的文件中读取它。