iOS 钥匙串 - kSecClassGenericPassword 和 kSecClassInternetPassword 有什么区别?

iOS Keychain - what is the difference between kSecClassGenericPassword and kSecClassInternetPassword?

我有一些代码可以将数据存储在钥匙串中。该代码在单元测试期间有效。我存储的值是 Data 但是,当我指定

 kSecClass : kSecClassGenericPassword, I get OSStatus 0 - success
 kSecClass : kSecClassInternetPassword, I get OSStatus -25303

kSecClassGenericPassword 和 kSecClassInternetPassword 之间的存储要求或区别是什么? (相同的代码因 kSecClassInternetPassword 而失败)

更新:互联网密码查询可能缺少一个必填字段,例如 kSecAttrServer,而不是 kSecAttrService

"Internet passwords" 是 Safari 的一些特殊记录。它们包括主机和用户数据,当您为未知站点列表存储数百条记录时,这些数据使它们更容易查看。它们几乎从来不是浏览器想要的。

在几乎所有情况下,无论您要存储什么,应用程序想要存储数据的内容都是 "generic password,",即使它不是密码。 "Generic password" 基本上是 "blob of encrypted data."(如果您的应用需要存储 public/private 密钥或证书,那么适用的 类 对此很有用,但这不如存储 "blobs of encrypted data.")