我正在编写一个 winforms 应用程序,它将用户名和密码本地存储在配置文件中,这样使用该应用程序的人就不必在每次登录到我的应用程序支持的各种服务时重新输入他们的凭据。密码能够被解密是绝对必要的,所以我选择使用 ProtectedData 以及 Protect 和 Unprotect 方法来安全地存储密码。这使得保护他们的数据的责任很容易转嫁给 Windows 和最终用户,而不用担心密钥之类的问题。
现在我想为用户提供在安装之间移动设置的能力。一个很好的例子是,如果他们希望保留许多不同帐户设置的备份,或者他们想移动到另一台计算机。
我已经解决了它是这样的:
- 用户点击“导出账户”按钮
- 应用程序使用 Unprotect 解密存储的设置
- 应用程序将设置写入明文“备份”,然后将其导入新帐户并重新加密。
在第 3 步之前,所有这些听起来都很棒。第 3 步让我很困扰,因为它将密码以明文形式放置。在这种情况下是否有导入/导出凭据的最佳实践,或者被认为“可以”让用户有责任保护导出的文件?对我来说,假设用户正确保护了他们的 Windows 帐户,这似乎是可以假设的。我已经提出了不允许他们导入/导出设置文件的想法,但这似乎是一个很大的不便。同样,我也可以构建一个极其罕见的极端情况,即某人拥有如此多的存储帐户,以至于手动重新输入只需不到十年的时间。
如果有做这件事的经验的人愿意为此提供最佳实践/建议,我将不胜感激。对于必须处理存储凭据的所有复杂性,我还是很陌生。