如何在Android应用程序中安全地存储凭据(密码)?

时间:2012-06-12 05:08:26

标签: android security

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

1)KeyChain。
仅适用于操作系统版本4.

2)共享偏好。
它以纯文本格式存储数据,即使我加密数据,也可以通过反编译应用程序代码来破解加密密钥。

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

请建议我更好的方法来保护Android应用程序中的凭证信息,如IPhone KeyChain。

2 个答案:

答案 0 :(得分:16)

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

另外:

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

2)这对于有根电话只是一个问题,或者如果某人有物理访问设备的话。

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

答案 1 :(得分:7)

哈希是解决方案 不要将凭据作为纯文本存储在共享首选项或任何媒体中。

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

以下是它的工作原理:

<强> 在线

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

  2. 可以生成salt并从服务器返回到客户端 或者可以在客户端生成

  3. 然后将其存储为盐并散列密码并存储。

  4. <强> 离线

    1. 我们将使用我们存储的盐哈希用户输入的密码

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

    3. 如果两者相同,那么我们将让用户进入其他地方我们不会让用户进入。

    4. 优点:

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

      2. 即使设备已植根,也很难强制使用哈希。

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