在 app.config 中安全地存储密码 - 信息过载

Securely Storing Password in app.config - information overload

我编写了一个连接到 API 的控制台应用程序以下载数据(使用 RestSharp)。下载的数据首先由 RestSharp Entity Framework 6 类 转换为代码,然后通过对 EF6 类.

context.SaveChanges 调用更新数据库

控制台应用程序最终将 运行 作为 windows 服务。

一切正常,但我们的安全人员要求我确保使用不同的系统帐户连接到 API 而不是连接到数据库的系统帐户。

将使用运行 windows 服务的帐户建立 API 连接。那是一个用户。 Entity Framework 连接字符串当前设置为 UseIntegratedSecurity=true,这是需要更改的位。所以..我认为最好的选择是将连接到数据库的用户名和密码存储在 app.config 文件中,但对这些值进行加密。

有没有比使用 app.config 文件更好的选择?如果有它是什么?如果没有,您能否给出一个基本示例,说明如何加密和解密 app.config 文件中保护数据库的密码?每个选项(DPAP、SecureString 等)似乎都有缺点。我应该使用 PBKDF2 吗?老实说,我对各种选择、利弊、风险和 .net 扩展不知所措。是否只有一个答案可以以可实施的方式达到目的?被广泛接受为安全且相当容易安装的东西?

也许我已经读到了最好的解决方案,但它已经被那些(不是贬义的)迂腐和学术的人分开了,我转离了我应该做的事情..

我已经阅读了大量关于这样做的文章和问题; say things like "there are many options when it comes to encrypting your data" and then quote lots of third party products, some of them give detailed examples (using the same suggestion as this question) but seem to get pulled apart in the comments, some give detailed answers 这些都是非常理论化的,但没有帮助我了解如何实际按照他们所说的去做...如果有人能够提出一个我可以遵循的简单建议,我将非常感激!

感谢所有人,特别是@Cleptus,我采纳了他们的建议。最后,我获取了 API 密钥并使用 DPAP 安全性对其进行了加密。这个密钥本质上是对 API 的访问,所以现在它是安全的,我已经为 运行 和 windows 服务创建了一个单独的用户,可以使用集成安全访问数据库。

我现在在 app.config 文件中有一个用于 api 密钥的长加密值,windows 服务的密码是使用 windows 安全性保存的。