C# 读取已加密的自定义web.config节失败

C# 读取已加密的自定义web.config节失败,c#,web-config,C#,Web Config,我正在开发一个安装程序安装一个web应用,安装过程的一部分要求我在web.config中设置一些自定义配置,然后在末尾加密此部分以及连接字符串部分 一切看起来都很好,我的应用程序完成时没有错误,当我在文本编辑器中查看web.config时,我加密的部分确实看起来是加密的,但是,当我加载web应用程序时,我会遇到以下错误: 配置错误说明:配置过程中发生错误 处理服务此请求所需的配置文件。 请查看下面的特定错误详细信息并修改您的 配置文件 分析器错误消息:使用提供程序解密失败 “RsaProtect

我正在开发一个
安装程序
安装
一个
web应用
安装过程的一部分要求我在web.config中设置一些自定义配置,然后在末尾加密此部分以及连接字符串部分

一切看起来都很好,我的应用程序完成时没有错误,当我在文本编辑器中查看
web.config
时,我加密的部分确实看起来是加密的,但是,当我加载web应用程序时,我会遇到以下
错误

配置错误说明:配置过程中发生错误 处理服务此请求所需的配置文件。 请查看下面的特定错误详细信息并修改您的 配置文件

分析器错误消息:使用提供程序解密失败 “RsaProtectedConfigurationProvider”。来自提供程序的错误消息: '',十六进制值0x12,是无效字符。第18行, 第54位

到目前为止,我设法发现,如果我只加密连接字符串部分,上述问题不会发生,它似乎只是与读取我的自定义部分有关。所以我的问题是: 我是否需要在我的自定义配置getter中实现一些东西,以便在阅读之前首先解密该部分,或者这是.NET应该为我做的事情,我需要探索一些不同的东西

我的代码如下。我刚刚包括了一些我认为重要的内容,如果你需要了解更多,请告诉我,我会更新这个问题

提前谢谢

Web.Config输出

  <configSections>
    <section name="EngageConfiguration" type="BeaconAPI.EngageConfiguration, ConfigExtensions" />
  </configSections>

  <EngageConfiguration configProtectionProvider="RsaProtectedConfigurationProvider">
    <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
      xmlns="http://www.w3.org/2001/04/xmlenc#">
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
          <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
            <KeyName>Rsa Key</KeyName>
          </KeyInfo>
          <CipherData>
            <CipherValue>gAGuJwEoWS+0jMrTuyzDQ7pKxeMaAdeXXr53UvkbaXCm5JH/pO522+EWo4faSCRaBUxoBumbgMI69WRvsqrq9eS3Q+MAmLaxtGG21raC5MpF19xfjDfsbxsE6ZDB3mPTxxkXCuGmcLdWtm64PER3F8CrSmJYBAx99BZ07FfddINIeJwXU60sAFfAVGSKa5yxKNGlDcTSkPMlYxy3MrCNPgp+TipsZDK/AGL4HeZoDcNwQbFYHwXWHqJTJMPTV5xsXeXp5IdLLaziWZaecnYi2p6vLqMoU79G/Nuzga/VyQ914rYVUZXFIuDHO1WwhKwzs3sIgPoADnaUj5AwCs3DrQ==</CipherValue>
          </CipherData>
        </EncryptedKey>
      </KeyInfo>
      <CipherData>
        <CipherValue>yHh7cBKbgz1c7YSkjVVYGDZB3EhRj0QTiQY3AH3YwAISO5yAuNmhiHCPiT6XoGPTd6Bgq9Ltnl++5T8q9JN4xMzJ6OecchxWUG6TMZxmAqiCK2arkPtzO1pMISK5+SlwXr0Z5VsJDGGnTRaVcjFAviHxLIfeoL5m41Q3nRoUPnb/63xVLAdAiDN/d3pT+W08nOhRynNVBR73zVcby7+g8rUplU9ANj8aE2oX7Kja2rxabQiAjwLs3V4fv+eTlwHmVdRmw6QT+VQEkwGySyocfGNJgXlmUJGbWkyazZQtWgXw67hQMe2qGd+OGt5AfM5i020f7rXLP7gowjyR992PPGXL87ihv1X7JLaDstolvNEBP7lTLP4UCDk1u/p/fzscJfNmW0iSmARn1K9in4FKWdZEprO8Pcd2cLzSLg/czq3oRs8DtLRHdf44DdCd+F/NFn4pVL4D/w+HseicrK120yVBzqlkxB0lvJH853KQCd+hYrMOf7kxuHckgUBpVlDuNbsOr4z4X3A6jFoAEajP2QDrRfNc3eBHt43LEIDWDKKl+Gzw4OTm/ksL/P4lmpiUYMqMskxSkw2ZHH2LJ1joAg6lQbI8nffyrlxpRyg5fgCk5yNJ1rlttpAfD+YbIdpDl+wJbn+pcm9NK6POG1n8kZAGvkkak4h1ypWWYU2/QxOIXi5a+ov4uMoTrKxchdqeIRNqDKnV1NxhRMqM0nQMPbSb3TP7WIFF/20QCZPPPmoyaZWljgnWwIE/+jba5ObKA03sPYJTsywLNJLDaSnqXKV4lmcmGIUCTlfPltAEtXKoFQuD0J7j6BD/64vfeWEv3fUTo7JeH2jxch2U/NTmgtQhopJXzAXChRI4HV4E/Qj2Z9xWiOOj6SW/dSUATk3MKtZI7OACQ5XVQD4ZZVm9Gln3hq3HWnGYuWLkI+KohvKMSSzs5qlCt+zAEVeQ/j7n98xYaFFWgjYkx9xo6VokAP+cxqwM3AT3XIAEXI/hpSlxk9JENYk9aET+OMTR4vYjSglrXMeTV2pX2kpw3dp86M8nZgOp1/yY2KoPzOvtpfFEDTxeH2TTTklpxRk0hNXIDGU8i3OUz/jQ8vbsZdrXwTPLGnAq4xlAdqmUuXq0LHK5MGIL+4GRjR5ACPhA3ktHI/QRO+I8gkStW6ZmhhM9oEBb4lFoKlZJVvvgaaGjvRJ348QtlCFb/8EAjj3Q0mnW9QMRKdUwAoh+nhrJe9jhdUXgqp7QiEw6NtaHULJM+SyrrDWjLmTvLJrpAgpNIuPcZtqyLrwRdfmvJQLH/P2HHNwCEnXVXwtotkUBnu8y+of4FIFx7GuzjQo/uEIQq6p1JW2pS1QiodDfPuZJqoCKsU4QUqoaLXpI1SRGGc1+2xrelyQj9X8HS601ZXURk+0EJhz7aRvSktQlSecdeTFr5ZgtR4zrcVvdXFvoCdT5cQv++8hsyN/VajDYvUCwKscarvd4JTahqnR1ODEg3e2m8NdWOdVzy5dbMSGt1i+ecrxQtMqxCOSUCGd+Ryb+Nqiprh4RO+usoxFQH6IkSAPMM3iNDLSw8Qp00mA6+g/ulGHkxyv2JVp/G+K+AAhLzTdMoqF8JYYbn+xcoXec8K/WycyjGZ4IsivePYg0xEoegq5ZZbkcKQOrz+OxnRiZEmyz</CipherValue>
      </CipherData>
    </EncryptedData>
用于尝试和访问值的代码

private static void GetConfigValue(EngageConfiguration engageConfiguration, string Val)
        {
            return engageConfiguration.SystemConfiguration[Val].Value;
        }

与加密web.config的部分不同,我将创建一个带有加密值的xml配置文件,您可以对类进行反序列化/序列化。 我喜欢尽可能简化web.config和app.config

private static void GetConfigValue(EngageConfiguration engageConfiguration, string Val)
        {
            return engageConfiguration.SystemConfiguration[Val].Value;
        }