iOS Core Data 加密

14

我一直在使用苹果文档中提供的“SecKeyWrapper”类对核心数据字段进行加密。但是,这个类是非ARC的。我想知道是否仍然是加密核心数据字段的最佳方式,或者是否有更新/更好的解决方案可用?

谢谢


2
很好奇为什么这个问题会被踩,希望能知道原因,这样我才能更好地改进我的问题,否则踩也没有任何意义 :) - user390687
1
请注意:如果您将鼠标悬停在“踩”箭头上方,会显示“此问题没有展示任何研究努力;它不清楚或者没有用处”。这就是我猜测的踩的原因。 - showdev
1个回答

30

iOS 5及更高版本中,Core Data默认使用NSFileProtection来保护持久化数据。

对于iOS 5.0或更高版本的应用程序,默认情况下,持久存储现在以加密格式存储在磁盘上。默认保护级别防止在用户第一次解锁设备之前访问数据。您可以通过为NSPersistentStoreFileProtectionKey键分配自定义值来更改保护级别,在配置持久存储时。有关iOS 5.0中新增的数据保护的其他信息,请参见“数据保护改进”。

如果您想修改Core Data存储的默认文件保护行为,可以在存储选项字典中将NSPersistentStoreFileProtectionKey键的值更改为不同的NSFileProtectionKey值。
示例:
NSDictionary *storeOptions = @{NSPersistentStoreFileProtectionKey  : NSFileProtectionComplete};

if (![coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[self storeURL] options:storeOptions error:&error]){
     [self presentError:error];
 }

1
请注意:“默认保护级别会防止用户在第一次解锁设备之前访问数据。” 用户解锁设备后,数据将不再加密,并且即使用户再次锁定设备,数据也将保持不变。 - Jeff Wolski
1
这就是为什么答案没有使用默认值的原因。 - quellish
我希望我能够额外点赞,因为你实际上引用/直接链接到文档。 - Rembrandt Q. Einstein
自iOS 8.3以来,除非有意共享,否则所有应用程序数据都已加密,并且禁止所有访问。这就是为什么原始文件浏览器和越狱都成为历史的原因。虽然在某些情况下我对此感到不满意,但这是正确的做法。 :) - jack
1
@jack:“自 iOS 8.3 起,所有应用程序数据都将被加密,除非有意分享。”您能指出相关文档吗?即使手机已解锁,数据是否一直被加密? - lostintranslation
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接