1

在应用程序中安全地存储用户凭据(用户 ID/用户密码)并在下次应用程序启动时自动使用它们是一个常见要求,但我无法弄清楚如何在没有用户交互的情况下执行此操作。

使用 JSON 存储我需要一个密码来加密信息,所以如果我将用户凭据存储在 JSON 存储中,我需要向用户询问用于加密信息的密码。

我想出的一个解决方案是将用户 ID 存储在不加密的 JSON 存储中,并将密码存储在使用用户 ID 作为密码加密的 JSON 存储中。可能这个解决方案比不加密任何东西提供更多的安全性,但我认为这不是一个完整的解决方案。

正如评论中所解释的,这是一个非常糟糕的主意。

是否有任何解决方案可以安全地存储用户凭据并在无需用户交互的情况下恢复它们?

4

1 回答 1

2

您可以在 iOS 上使用Keychain API 。Android 似乎没有等效的 API

我想出的最完整的解决方案是将用户 ID 存储在不加密的 JSON 存储中,并将密码存储在使用用户 ID 作为密码加密的 JSON 存储中。可能这个解决方案比不加密任何东西提供更多的安全性,但我认为这不是一个完整的解决方案。

强烈建议不要这样做,如果您以纯文本形式存储加密密钥(用户 ID),那么攻击者可以简单地使用它来获取密码。

更新(2014 年 8 月 27 日)

你应该考虑:

  • 散列- 您可以散列要保护的值。这些是单向函数,因此一旦对密码进行哈希处理,就无法取回密码。但是,您可以验证用户是否提供了正确的密码。例如:首先登录您,store( hash(password) )然后在下次登录时比较 if hash(password_provided) == stored_password_hash。如果匹配,则用户提供了相同的密码。您还应该使用

  • 您可以为用户提供使用ABPadLockScreen 之类的库设置引脚的能力(您也可以为 Android 找到或实现类似的东西)。然后,您可以使用 pin 作为PBKDF2输入来生成加密密钥(当您将 pin 作为密码传递时,JSONStore 将为您执行此操作)。我建议让用户只尝试少量不正确的密码,特别是如果密码只是数字且很短,这样他们就无法通过尝试各种组合来轻易猜出密码。这里的想法是,密码比密码更容易记住和输入。

仅供参考 - 有一个类似于 StackOverflow 的 Stack Exchange 站点,但这里有安全问题。

于 2014-08-26T13:00:05.980 回答