1

用户请求在我的 iphone 应用程序上“锁定”,这很有意义,因为它包含私人信息。我相信数据的加密超出了人们对手机的期望,所以我的目标只是防止对应用程序的意外访问。我的计划是使用钥匙串来存储密码,使用我的应用名称作为服务名称。

我担心的是,如果用户丢失/忘记了他们输入的密码会发生什么。我可以通过编程方式做些什么来允许用户重置?删除应用程序会删除应用程序的钥匙串吗?

我不想收集用户电子邮件。(好吧,我愿意,但我不希望这成为理由。)并且不希望用户在丢失密码时被永久锁定在应用程序之外。

4

3 回答 3

1

除了(更短、更快的)密码或 PIN 之外,通常的方法是收集一组安全问题和答案。如果用户忘记了她的密码,她应该希望能记住她更长、更容易记忆的安全问题的答案。

您可以将两者都存储在应用程序的钥匙串中。

于 2010-09-21T14:41:41.303 回答
1

在 iPhone 上只有一个钥匙串数据库,并且不可能添加自定义的、特定于应用程序的钥匙串(就像您可以在 Mac 上做的那样)。默认情况下,您在应用中添加到钥匙串的钥匙串项仅对您的应用可用。没有文档(据我所知)说明用户删除您的应用程序时发生的行为:可能是 iOS 4.1 删除了应用程序的钥匙串项目,也可能是它确实将它们留在了钥匙串中。

根据您存储用户密码的方式,您可能能够检索它。例如,如果您在 a 中存储了与您的应用程序相关的标签以及用户密码kSecAttrApplicationTag,那么您可以使用

OSStatus SecItemCopyMatching (
   CFDictionaryRef query,
   CFTypeRef *result
);

功能。如果搜索成功,那么您可以使用kSecValueData密钥从返回的字典中检索密码,或者,如果您愿意,您甚至可以使用

OSStatus SecItemUpdate (
   CFDictionaryRef query,
   CFDictionaryRef attributesToUpdate
);

有关其他信息,请参阅钥匙串参考iOS文档的钥匙串服务任务。

于 2010-09-21T15:57:47.083 回答
0

回首往事,我发现我从来没有用我的实际实现来更新这个问题。

我的问题的核心是我没有用户的联系信息,也没有以任何方式复制他们的数据。也就是说,我让他们的数据保持私密,部分原因是不启用互联网或电子邮件功能。

因此,我SecItemUpdate按照上面的建议使用,同时还为应用程序编写了默认密码(即没有等效密码)。然后,如果用户丢失了密码,他们可以告诉应用程序密码丢失,此时应用程序将密码重置为默认密码并删除数据库中的所有私人数据。因此,丢失密码是有代价的,但任何时候都不能有人闯入并看到私人数据。

我已经使用这种方法几年了,它似乎很好地满足了我的用户。

于 2012-10-05T15:38:48.430 回答