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

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

1)KeyChain。
仅在OS版本4中可用。

2)共享首选项。
它以纯文本的forms存储数据,即使我对数据进行encryption,那么encryption密钥也可以通过反编译应用程序代码而受到威胁。

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

请build议我一个更好的方法来保护android应用程序,如iPhone KeyChain中的凭证信息。

Android目前并不支持iPhone的KeyChain。 如果您想保密,请勿将其存储在设备上。 或者至less不要在设备上存储encryption的密钥/密码。 就那么简单。

另外:

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

2)这只是根植电话的问题,或者是否有人物理访问设备。

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

哈希是解决scheme不要将凭据存储在共享首选项或任何介质中的纯文本。

只需input密码并散列,然后就可以将其存储在sharedPreferences或embedded式数据库中。

下面是它的工作原理:

线上

  1. 普通(非哈希)密码在成功login后发送到服务器进行validation和授权。

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

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

离线

  1. 我们将使用我们存储的盐散列用户input的密码

  2. 我们将与成功login时存储的散列进行比较

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

优点:

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

  2. 即使设备根深蒂固也很难强制哈希。

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