如何在C#中加密和解密自定义配置文件(XML文件)

时间:2010-01-28 00:26:15

标签: c# xml configuration web-config

我是论坛的新手。

我刚刚开始使用C#和webservices过去3个月,我有一个很棒的网络服务。不幸的是,我们使用一个自定义的“配置”文件(实际上是一个XML文件)来存储我们的连接字符串。

我们不想使用web.config connectionstring部分,因为内部编写的类和关联的xml文件将被其他项目(不仅仅是Web服务)使用。问题是我需要加密“配置”XML文件的用户名和密码,并用我的C#代码解密它。

可以说XML文件具有以下结构......

<?xml version='1.0'?>
<!--
TEST ENVIRONMENT
-->
<thesystem>
   <connectionString string="Data Source=( DESCRIPTION = ( ADDRESS_LIST = ( ADDRESS = ( PROTOCOL = TCP )( HOST = {0} )( PORT = {1} ) ) )( CONNECT_DATA = ( SERVER = DEDICATED )( SERVICE_NAME = {2} ) ) ); User Id= {3}; Password = {4};"/>
   <oracleDetails>
     <site name="thesite">
       <schema dbname="thedb"    dbHost="99.99.99.99" dbPort="9999" dbServiceName="SYSTEMSITE" dbUsername="xxx" dbPassword="yyy"/>
     </site>
   </oracleDetails>
</thesystem>

我在网上看了一下并设法围绕一种使用aspnet_regiis.exe加密文件的方式“作弊”

即:

  

C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727&gt; aspnet_regiis -pef oracleDetails。 -prov DataProtectionConfigurationProvider

     

加密配置部分...   成功了!

我通过将标记重命名并将xml文件重命名为web.config来实现此目的。我欺骗ASP.net认为我正在加密一个Web配置文件。

现在的问题是如何在C#中解密?

我尝试过使用以下内容......

Configuration _myConfig = ConfigurationManager.OpenExeConfiguration("OURSYSTEM.config");

其中OURSYSTEM.config是上面的XML文件。

该程序抛出一个错误,说它无法找到该文件。此外,OpenExeConfiguration更适用于带有app.config文件的Win应用程序。

1 个答案:

答案 0 :(得分:0)

运行aspnet_regiis -pef oracleDetails . -prov DataProtectionConfigurationProvider后,配置XML加密了吗?最有可能的是,问题是你的ASP.Net无法解密它,这最终是一个关键的访问问题。确保使用应用程序池可以访问的凭据对其进行加密。 IE浏览器。如果您的ASP应用程序池以用户foo运行,那么您必须以同一用户身份运行aspnet_regiis。