在钥匙串中保存数据模型的缺点是什么?

What are the downsides of saving data models in keychain?

我知道 Keychain 是为保存密码、Internet 密码、加密密钥等而设计的。但是,为什么不也保存小型可编码模型呢?

例如,包含大约 100 个用户敏感偏好属性的可编码和可解码结构。

我试过了,效果很好。虽然,没有太多可用的具体信息,但我想了解这样做是否有任何缺点。

实际上没有什么能阻止您这样做,因为编码数据模型将采用 Data/NSData 的形式。在朝那个方向前进之前,可能需要牢记两点:

  • 每个都有实际大小限制 单个钥匙串项(我个人无法找到官方说明,但我记得编写数据大小大于约 2 MB 的钥匙串项会导致钥匙串写入错误)。这意味着您应该注意数据模型的大小(例如,使用短 CodingKeys 而不是实际的 属性 名称,将在要写入的结果数据块中使用更少的字节)

  • 当用户删除应用程序时,钥匙串数据不会被删除。这是否会永远保持这样我不能说,但现在是事实,这意味着你可能需要在你的应用程序中放置一个逻辑以确保在前一个之上的另一个安装可能不会使用不必要的 old/dirty 数据

我并不劝阻您为此使用钥匙串,但以防万一,还有其他方法,例如在钥匙串上存储加密密钥并将其用于 encrypt/decrypt 您的实际数据模型并写入它们安全地保存在您的应用程序文档文件夹中。您可以将其与 NSFileProtectionComplete 设置等额外步骤相结合,仅当设备实际受密码保护时才可访问钥匙串中的加密密钥,并且如果您计划存储大量数据,则可以将加密和 CoreData 结合在一起。

希望对您有所帮助