我想制作一个应用程序,它将监视用户的电子邮件帐户中的传入电子邮件以及他的推特帐户中的推文。因此,用户必须提供他的登录凭据。我的疑问是如何以及在哪里存储这些敏感数据?我不希望我的应用程序惹恼用户反复询问这些事情。
此外,如果我应该加密然后存储这些数据,那么我应该如何保护我在应用程序中使用的密钥?
我想制作一个应用程序,它将监视用户的电子邮件帐户中的传入电子邮件以及他的推特帐户中的推文。因此,用户必须提供他的登录凭据。我的疑问是如何以及在哪里存储这些敏感数据?我不希望我的应用程序惹恼用户反复询问这些事情。
此外,如果我应该加密然后存储这些数据,那么我应该如何保护我在应用程序中使用的密钥?
加密的重点是使明文的保密性取决于较小密钥的保密性。
在这种情况下,单独加密对您来说毫无用处,因为您也无法存储密钥。
相反,您需要使用由第三方管理的一些现有秘密(使用密码),并使用它来派生密钥。
在 Windows 上,您可以使用 DPAPI,它最终由用户的登录密码支持。
如果用户忘记了他的密码(或者如果它是从不同的帐户更改的),您的数据将不可恢复地丢失。
请注意,这不会防御以该用户身份运行的代码。
你需要决定你要防御什么。
If you really need it (it's no good idea but...) you may want to create encrypted storage for passwords like Firefox has for example. Users will protect passwords with master password.
答案无处可去。即使以加密形式,您也不应该存储密码。“正确”的方式可能是模拟类似 Web 应用程序的行为。事实上,如果你登录推特,你可以选择“记住我”复选框,下次推特就不会要求你输入密码了,对吧?它是如何实施的?
通常,特殊令牌存储在客户端的 cookie 中。cookie 被发送到服务器并用于身份验证。Cookie 有过期日期,过期后会自动删除。
除非桌面应用程序有更好的解决方案,否则我建议您尝试使用这种机制。
我认为使用您的应用程序范围内的密码并使用该密码来加密所有其他密码,并且当应用程序说需要 twitter 时使用该密码来解密......进一步获取主密码的加盐哈希并将其保存在磁盘上。