解密ConnectionString

时间:2011-10-26 14:40:47

标签: c# asp.net .net connection-string

我一直在阅读有关C#/ ASP应用程序的web.config的某些部分的加密和解密,我成功地加密了我的应用程序的web.config的连接字符串。我的问题是解密。我正在使用标准代码进行加密和解密,但它会修改web.config。本地它工作正常,因为它确实修改web.config我可以保存它仍然会运行但是当我上传到远程服务器然后它不起作用。

我得到的错误是

  

配置错误说明:期间发生错误   处理为此请求提供服务所需的配置文件。   请查看下面的具体错误详情并修改您的   配置文件适当。

     

分析程序错误消息:无法使用提供程序解密   'RsaProtectedConfigurationProvider'。来自提供商的错误消息:   不良数据

加密

try
{
    Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
    ConfigurationSection section = config.GetSection("connectionStrings");
    if (!section.SectionInformation.IsProtected)
    {
       section.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider");
       config.Save();
    }
    catch (Exception ex)
    { 

    }

解密

Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
ConfigurationSection section = config.GetSection("connectionStrings");
if (section.SectionInformation.IsProtected)
{
    section.SectionInformation.UnprotectSection();
    config.Save();
}

每当页面加载时我都会调用解密方法,但它不起作用,它会给我上面的错误。

我根本无法访问主机服务器。因此,使用命令行不是一种选择。

3 个答案:

答案 0 :(得分:1)

确保本地远程服务器上有相同的解密密钥。这将是machine key element

答案 1 :(得分:1)

您可以create and export an RSA Key Container,但仍需要访问远程服务器才能导入容器。

我不相信machineKey元素在这里与BTW相关。来自MSDN:

  

具有本地计算机范围的密钥容器(useMachineContainer“true”)存储在%ALLUSERSPROFILE%\ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys

的隐藏文件夹中

答案 2 :(得分:0)

我猜这个场景是你在尝试在将web.config推送到托管服务提供商/远程服务器之前在本地加密。 Steve Rowbotham对这个问题的回答是正确的,因为您需要在开发机器和远程服务器上使用相同的RSA密钥容器才能在本地加密并远程解密。

您可以采用不同的路由并在部署过程中加密web.config吗?我们使用MsDeploy来处理在部署期间加密配置文件,如果您愿意,我可以提供一些示例代码。

或者,当您首次加载应用程序时(在global.asax中的Application_Start事件期间),您可以检查web.config的connectionStrings部分是否已加密,然后对其进行加密。您不应该手动解密web.config ...