存储密码

时间:2011-03-19 01:30:58

标签: android encryption

我正在创建一个用于存储加密数据的应用。

this问题中,OP si建议明确存储用户的凭证。

但是,如果我想存储使用SecretKeySpec(用于加密数据的密码)创建的加密密码,该怎么办?根据我的理解,密钥本身是加密的。

所以我可以存储和检索它。

注意:我不是在询问如何存储首选项,只要我了解SecretKeySpec如何工作以及如何,排序,序列化和检索加密密码。

编辑:抱歉,我忘了指定它需要与API级别4兼容。

3 个答案:

答案 0 :(得分:11)

直接来自developer website

  

聪明一点安全!

     

了解AccountManager不是加密服务或钥匙串非常重要。它以正文传递的方式存储帐户凭据。在大多数设备上,这不是特别关注的问题,因为它将它们存储在只能由root访问的数据库中。但是在root设备上,任何拥有adb访问权限的人都可以读取凭据。

     

考虑到这一点,您不应将用户的实际密码传递给AccountManager.addAccountExplicitly()。相反,您应该存储对攻击者有限使用的加密安全令牌。如果您的用户凭据保护了有价值的东西,您应该仔细考虑做类似的事情。

     

请记住:说到安全代码,请遵循“流言终结者”规则:不要在家里试试!在实施任何自定义帐户代码之前,请咨询安全专业人员。

     

现在安全免责声明已经不在了,现在是时候重新开始工作了。您已经实现了自定义帐户代码的内容;剩下的就是管道。

答案 1 :(得分:6)

哇。我真的不认为以明文形式存储用户的密码是一个严肃的选择。

查看专为此目的而设计的AccountManager。虽然它在您链接的问题中被忽略了,但SampleSyncAdapter确实是AccountManager示例的一个很好的资源,而且我知道SDK中包含的唯一一个。{/ p>

修改 - 关于javax.crypto,我认为它是一个比AccountManager更低级别的API。来自文档:

  

许多服务器都支持某种概念   身份验证令牌,可以是   用于验证对请求的请求   服务器没有发送用户的   实际密码。 (Auth代币是   通常与单独创建   请求包括用户的   凭证。)AccountManager可以   为应用程序生成auth令牌,   所以应用程序不需要   直接处理密码。 Auth令牌   通常可以重复使用并缓存   AccountManager,但必须刷新   定期。这是责任   应用程序使auth无效   令他们停止工作时的代币   AccountManager知道它需要   重生它们。

如果我不需要,我讨厌在javax.crypto的层面处理这个问题。

答案 2 :(得分:-4)

如果条件匹配你可以简单地将用户名和密码都声明为if语句你可以在错误的情况下启动活动你可以简单地生成错误输入的吐司。但如果你丢失任何东西,你就无法从那里检索密码意思是,你可以为一个用户创建许多密码。我把这个东西添加到我的应用程序中并且对我来说很好。