如何在桌面客户端应用程序(Java)中存储密码和敏感数据?

时间:2013-05-27 20:30:57

标签: java security twitter-oauth password-protection email-integration

我想创建一个应用程序,它将监视用户的电子邮件帐户以接收传入的电子邮件以及他的Twitter帐户的推文。因此,用户必须提供他的登录凭证。我怀疑存储这些敏感数据的方式和位置?我不希望我的应用程序惹恼用户反复询问这些事情。

此外,如果我应该加密然后存储这些数据,那么我应该如何保护我在我的应用程序中使用的密钥呢?

4 个答案:

答案 0 :(得分:4)

加密的目的是使明文的保密性取决于较小密钥的保密性。

在这种情况下,单独加密对您来说是无用的,因为您无法存储密钥。

相反,您需要使用由第三方管理的一些现有秘密(使用密码),并使用它来获取密钥。

在Windows上,您可以使用DPAPI,它最终由用户的登录密码支持 如果用户忘记了密码(或者从其他帐户更改了密码),您的数据将无法恢复。

请注意,这不会抵御以该用户身份运行的代码 你需要决定你要防范的是什么。

答案 1 :(得分:1)

如果你真的需要它(这不是好主意,但是......)你可能想为像Firefox这样的密码创建加密存储。用户将使用主密码保护密码。

答案 2 :(得分:0)

答案无处可去。您永远不应该以加密形式存储密码。 “正确”的方式可能是模拟类似Web应用程序的行为。事实上,如果您登录Twitter,您可以选中“记住我”复选框,Twitter下次不会要求您输入密码,对吧?它是如何实现的?

通常,特殊令牌存储在cookie的客户端。 cookie被发送到服务器并用于身份验证。 Cookie具有到期日期,因此在时间结束时会自动删除。

除非有更好的桌面应用程序解决方案,否则我建议您尝试使用此机制。

答案 3 :(得分:0)

我认为使用您的应用程序范围内的密码并使用该密码加密所有其他密码,当应用程序说需要Twitter时,使用该密码进行解密...进一步获取主密码的salted-hash并将其保存在磁盘。