在.net 4.5中不能加密配置文件,但在.net 3.5中可以这样做

本文关键字:net 这样做 但在 加密 不能 配置文件 | 更新日期: 2023-09-27 17:53:16

我有一个winform应用程序,我想在配置文件中存储一些值。因此,我创建了一个app.config文件。以下是其内容。

  <configProtectedData>
    <providers>
      <add name="DataProtectionConfigurationProvider" type="System.Configuration.DpapiProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses CryptProtectData and CryptUnProtectData Windows APIs to encrypt and decrypt" useMachineProtection="true" keyEntropy="" />      
    </providers>
  </configProtectedData>
  <appSettings>
  </appSettings>
  <system.web>
    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <providers>
        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
      </providers>
    </membership>
    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
      <providers>
        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
      </providers>
    </roleManager>
  </system.web>
</configuration>

我还希望对数据进行加密,因此我使用以下代码对其进行加密:

 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                    ConfigurationSection section = config.GetSection(sectionName);
                    if (!section.SectionInformation.IsProtected)
                    {
                        section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
                    }
                    section.SectionInformation.ForceSave = true;
                    config.Save(ConfigurationSaveMode.Modified);

当我在VS 2008中使用。net 3.5编译和运行代码时,这工作得很好。但是,当我使用。net 4.5使用VS 2012编译代码时,它在section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider")行给了我以下错误。此外,在添加值到配置文件后,当我试图保存文件时,它会给我同样的错误。

The entry 'DataProtectionConfigurationProvider' has already been added.

这是什么原因?

在.net 4.5中不能加密配置文件,但在.net 3.5中可以这样做

该提供者在机器中定义。

<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
    <providers>
        <add name="RsaProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="NetFrameworkConfigurationKey" cspProviderName="" useMachineContainer="true" useOAEP="false"/>
        <add name="DataProtectionConfigurationProvider" type="System.Configuration.DpapiProtectedConfigurationProvider,System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses CryptProtectData and CryptUnProtectData Windows APIs to encrypt and decrypt" useMachineProtection="true" keyEntropy=""/>
    </providers>
</configProtectedData>
无需在app.config中重新添加。