2012-06-15 234 views
2

如果加密连接字符串保存在外部配置文件中,并且由asp的web.config的connectionStrings部分中的configSource属性指定,那么如何在C#代码中读取加密连接字符串.net应用程序?web.config中的加密连接字符串

外部配置文件应该只有connectionStrings节点,但是当它被加密时,configDataProvider节点也应该出现在同一个文件中。所以它不能用在configSource属性中。

我有加密连接字符串,并希望它在外部配置文件。这怎么处理?

感谢您的指点。

+0

你尝试把连接字符串一节中的外部文件和_then_加密它? – Oded

+0

有点过时了,但你可以试试这个解决方案:[在ASP.NET的外部配置中加密字符串](http://gregorybeamer.wordpress.com/2008/12/04/encrypting-string-in-an-external -config-for-asp-net /) – Jeremy

+0

如果将其放入外部文件中,然后对其进行加密,则会在插入configProtectedData节点后使用configSource属性对其进行读取。 – Sam

回答

3

在你的app.config:

<configuration> 
    <connectionStrings configSource="foo.config" /> 
    ... 
</configuration> 

,并在您foo.config

<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider"> 
    <EncryptedData> 
     <CipherData> 
      <CipherValue> 
       AQAAANCMnd8BFdE.... 
      </CipherValue> 
     </CipherData> 
    </EncryptedData> 
</connectionStrings> 

并在代码:

ConfigurationManager.ConnectionStrings["someKey"] 
+0

我想在纯文本中使用foo.config并在部署过程中加密,最好不必像手动删除任何节点一样进行任何操作。 – Sam

+0

@Sam,阅读关于如何完成加密:http://msdn.microsoft.com/en-us/library/ff647398.aspx。这个过程当然可以脚本化和自动化。我已经展示了你的配置在运行时应该如何看待。为了达到此配置,您可以使用未加密的文件包含连接字符串并编写文档中描述的加密过程。因此,请继续阅读本文档以了解此过程,以便在构建过程中编写脚本。 –

+0

我将connectionStrings作为单独的文件foo.config。假设我在使用-prov“Myprovider”开关部署期间使用脚本进行加密,该开关将在foo.config中插入configProtectedData节点。这将导致错误“configSource文件的格式必须是包含该部分名称的元素。”当在C#代码中访问时。我错过了什么吗? – Sam