如何在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式数据库中。
下面是它的工作原理:
线上
-
普通(非哈希)密码在成功login后发送到服务器进行validation和授权。
-
盐既可以生成,也可以从服务器返回到客户端,也可以在客户端生成
-
然后将其存储为盐并散列密码并存储。
离线
-
我们将使用我们存储的盐散列用户input的密码
-
我们将与成功login时存储的散列进行比较
-
如果两者相等,那么我们将让用户在其他地方,我们不会让用户进来。
优点:
-
所以现在你不必担心版本兼容性。
-
即使设备根深蒂固也很难强制哈希。
-
即使有人反编译/破解应用程序,但很难进行反向工程