.net 使用受保护的配置提供程序加密配置信息

.net 使用受保护的配置提供程序加密配置信息,.net,encryption,.net,Encryption,使用受保护的配置提供程序加密应用程序配置文件中的配置信息时, 使用什么加密 什么算法和密钥用于加密和解密信息 更新 好的,我已经阅读了Sani Huttunen提供的链接,并阅读了这些和 因此,RSAProtectedConfigurationProvider使用TripleDes和RSA加密以及 DpapiProtectedConfigurationProvider使用三元组 RsaProtectedConfigurationProvider使用计算机帐户或用户帐户,并且 DpapiProte

使用受保护的配置提供程序加密应用程序配置文件中的配置信息时, 使用什么加密

什么算法和密钥用于加密和解密信息

更新

好的,我已经阅读了Sani Huttunen提供的链接,并阅读了这些和

因此,RSAProtectedConfigurationProvider使用TripleDes和RSA加密以及
DpapiProtectedConfigurationProvider使用三元组

RsaProtectedConfigurationProvider使用计算机帐户或用户帐户,并且 DpapiProtectedConfigurationProvider使用用户的登录密码作为加密和解密的密钥

我认为这对于asp.net web应用程序来说很好。但是windows应用程序呢

我被引导相信我的所有连接字符串都应该保存在app.config文件中,然后使用受保护的配置提供程序进行加密

但是,如果将winforms应用程序部署到另一台计算机上,它将无法解密连接字符串,因为该密钥基于开发人员的登录密码,并保存在未随应用程序部署的密钥文件中。或者,如果密钥文件与应用程序一起部署,则任何人都可以解密app.config文件

这是正确的吗?那么使用这种方法有什么意义呢


对于已部署的windows应用程序,保护app.config文件中信息的方法是什么?

您可能需要阅读所有相关内容

.NET framework中有两个提供程序:

使用Windows数据保护API(DPAPI)加密和解密数据


使用RSA加密算法对数据进行加密和解密。

这很棘手。 如果要加密某个内容,则需要管理用于加密该内容的密钥

DpapiProtectedConfigurationProvider将其卸载到操作系统,操作系统有效地使用用户密码来保护密钥。(但是,您必须绑定到该帐户或机器)

RsaProtectedConfigurationProvider类似,但提供了导出公钥/私钥对的方法。因此,您可以将其添加(导入)到另一台机器

然而,这又变得棘手,因为如果你想将应用程序移动到另一台机器上,你需要复制公钥/私钥对。如果您(或您信任的人)可以这样做,并在之后删除密钥容器,则可以这样做。记住,如果有人抓住了那个钥匙盒,你就回到了原点

如果您使用的是Active Directory(我认为),您可能可以设置一个用户帐户(在所有计算机上),您的应用程序可以在该帐户下运行。这将允许您使用DpapiProtectedConfigurationProvider。事实上,您也可以使用Active Directory安全地部署RsaProtectedConfigurationProvider的密钥容器。(我不是广告专家,你需要自己用谷歌搜索)

使用是另一种选择。这样,您就不用将凭据存储在一起了。(如果你可以的话,这是最好的选择)

另一个选择(这是我为我正在从事的项目.YMMV所做的)是实现一个

我无法控制AD,安装密钥对不适合我们的部署工作流程。 因此,在我的例子中,当应用程序试图从配置中获取连接字符串时,它会在注册表中查找。如果它在那里找到明文密码(不要问为什么,但这可以纳入我们的部署工作流程),它会使用DPAPI对密码进行加密,但会将密码加密到应用部署到的机器上。 然后将其放入web.config并从注册表中删除。 所以我确实需要输入一次int凭据。但运行应用程序会导致对其进行加密,但只能由该计算机上的应用程序解密。

这是因为我的特殊环境。但是,如果可以,建议您使用SQL Server集成安全性。

您的winform应用程序试图解决什么问题

你有两个矛盾的问题。您需要将应用程序分发给不受信任的人。您需要一个到sql server的可信连接

即使你加密了连接字符串,如果你的密钥以某种方式存储在同一台机器上,那么你的用户也可以反编译你的应用程序并计算出它是什么

即使连接是只读的,它仍然容易受到SQL注入攻击

更好的解决方案可能是使用一些restful api。这将为您的用户提供一个定义良好的api,说明他们可以做的事情。然后,您可以管理用户和他们可以做的事情(即,可以更新他们的详细信息,但不能更新其他人,但仍然可以读取每个人的公共统计数据)

请看一下创建安全api的简单方法

(如果您提供更多详细信息,我可以修改我的答案,并提供一个更适合您需要的解决方案。)