在iPhone上只有一个钥匙串数据库,并且不可能添加一个自定义的,特定于应用程序的钥匙串(就像你可以在Mac上做的那样)。默认情况下,您添加到应用程序中钥匙串的钥匙串项目仅适用于您的应用程序。没有文档(据我所知)说明用户删除应用程序时发生的行为:可能是iOS 4.1删除应用程序钥匙串项目,可能是它将它们留在钥匙串中。
取决于你如何存储在用户的密码,你可以找回它。举例来说,如果你存储的与用户的kSecAttrApplicationTag
密码一起涉及您的应用程序代码,那么你可以使用
OSStatus SecItemCopyMatching (
CFDictionaryRef query,
CFTypeRef *result
);
功能搜索您的确切标签在钥匙串。如果搜索成功,那么你可以使用kSecValueData
键检索返回的字典中的密码,或者,如果你愿意,你可以使用
OSStatus SecItemUpdate (
CFDictionaryRef query,
CFDictionaryRef attributesToUpdate
);
有关其他信息,甚至改变它,请参阅the keychain reference和Keychain Services Tasks for iOS文档。
同意,我的应用程序可以从钥匙串中检索密码。我想要什么条件?我可以制作一些隐藏的关键笔划组合,我会在与用户联系时告诉用户。我可以让应用程序通过电子邮件发送密码,但除了我的判断之外,没有任何安全措施。我迷失在如何合理地阻止用户被永久锁定在应用程序之外。 – user216661 2010-09-22 14:34:37
您应该验证的唯一条件是用户询问密码实际上是应用程序的合法所有者。一个可能的解决方案是允许用户输入密码最多3次。在输入3次错误密码后,您将锁定应用程序并要求用户通过In App Purchase解锁。要购买解锁功能,用户必须证明他/她知道绑定到AppStore帐户的密码。这提供了证据表明用户是您应用程序的合法所有者(有人可能会偷走他/她的帐户凭据,但无法应对所有可能的情况)。 – 2010-09-22 16:40:12
购买解锁功能后,可能会显示用户清除您从钥匙串中恢复的密码或要求他/她更改密码的对话框:在这种情况下,您只需使用新密码更新钥匙串项目。支付这项服务,比如0级,对我来说似乎是合理的。 – 2010-09-22 16:45:56