44

我想将用于登录我正在开发的金融应用程序的密码存储在安全的地方。在做了一些网上冲浪后,我发现了以下选项,但每个选项都有一定的缺点。

1)钥匙链。
仅在操作系统版本 4 中可用。

2) 共享偏好。
即使我对数据进行加密,它也会以纯文本形式存储数据,然后通过反编译应用程序代码可能会破坏加密密钥。

3) 访问密钥库守护进程并在其中存储凭据。
( http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html ) 需要另一个密码才能记住。

请建议我一种更好的方法来保护 Android 应用程序(如 iPhone KeyChain)中的凭证信息。

4

2 回答 2

18

目前在 Android 中不等同于 iPhone 的 KeyChain。如果您想保密,请不要将其存储在设备上。或者至少,不要将加密的密钥/密码存储在设备上。就那么简单。

此外:

1) 即使在 ICS 上,您也不能直接使用 KeyChain 来存储应用程序机密(参见 3 中的博文)

2) 这只是有根手机的问题,或者如果有人可以物理访问设备。

3) 记住一个密码,保护你所有的凭据,比记住多个密码要好得多。此外,在 ICS 上,没有单独的密码,凭证存储受设备解锁密码保护。

于 2012-06-12T06:32:44.523 回答
9

散列是一种解决方案,不要将凭据作为纯文本存储在共享首选项或任何介质中。

只需对密码进行加盐和哈希处理,然后您就可以继续将其存储在 sharedPreferences 或某些嵌入式数据库中。

下面是它的工作原理:

在线的

  1. 成功登录后,将普通(未散列)密码发送到服务器进行身份验证和授权。

  2. 盐既可以生成并从服务器返回到客户端,也可以在客户端生成

  3. 然后将其存储为盐并对密码进行哈希处理并存储。

离线

  1. 我们将使用我们存储的盐对用户输入的密码进行哈希处理

  2. 我们将与成功登录时存储的哈希值进行比较

  3. 如果两者相等,那么我们会让用户进入,否则我们不会让用户进入。

好处:

  1. 所以现在您不必担心版本兼容性。

  2. 即使设备已植根,也很难暴力破解哈希。

  3. 即使有人反编译/破解了应用程序,也很难进行逆向工程

于 2013-12-13T06:40:49.393 回答