【问题标题】:NSDataWritingFileProtectionComplete with WriteToFile not encrypt the dataNSDataWritingFileProtectionComplete 和 WriteToFile 不加密数据
【发布时间】:2015-02-15 21:32:33
【问题描述】:

我听说我们可以加密文档,将它们转换为 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!

为什么不加密?

【问题讨论】:

    标签: objective-c nsdata writetofile


    【解决方案1】:

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

    但是,如果您只是想让字符串不易阅读(使其模糊),那么您可以在转换为 NSData 时执行类似的操作。请注意,这根本不安全。

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:content];
    

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

    NSString *content = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    

    这不是加密,但它应该掩盖字符串,使某人难以从保存的文件中读取它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多