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;
}