在钥匙串中保存数据模型有啥缺点? [关闭]

Posted

技术标签:

【中文标题】在钥匙串中保存数据模型有啥缺点? [关闭]【英文标题】:What are the downsides of saving data models in keychain? [closed]在钥匙串中保存数据模型有什么缺点? [关闭] 【发布时间】:2020-04-05 22:02:59 【问题描述】:

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

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

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

【问题讨论】:

@PaFi:你经历过吗?还是猜测? 【参考方案1】:

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

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

当用户删除应用程序时,钥匙串数据不会被删除。这是否会永远保持这种状态我无法判断,但就目前而言,这是一个事实,这意味着您可能需要在您的应用程序中添加一个逻辑,以确保在前一个应用程序之上的另一个安装可能不会使用旧的/脏数据作为不必要的

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

希望对你有帮助

【讨论】:

laco:感谢您的详细回答。你已经涵盖了我脑海中的一切,甚至更多。在我接受您的回答之前,我想再听听一些经验。

以上是关于在钥匙串中保存数据模型有啥缺点? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

检索钥匙串中的数据以获取在 ios 中不起作用的特定服务

如何检查用户名和密码是不是已保存在钥匙串中

有啥方法可以保存数据,即使在没有钥匙串的情况下在 ios 上重新安装应用程序?

使用 iphone sdk 在钥匙串中保存时出错

在 icloud 钥匙串中保存密码

Keychainitemwrapper 类中的 SecItemCopyMatching 条件失败,因此无法检索钥匙串中保存的值