Asp.net 如何在web.config中加密一个条目

Asp.net 如何在web.config中加密一个条目,asp.net,encryption,web-config,Asp.net,Encryption,Web Config,ASP.NET 4 我在web场的web.config中使用了连接字符串。不过,我还想加密另外一个自定义密码条目。我应该如何使用RSA密钥对其进行加密,而不必对其余配置进行加密。请告知,谢谢 例如: <appSettings> ... <add key="Host" value="www.foo.com" /> <add key="Token" value="qwerqwre" /> <add key="Acc

ASP.NET 4

我在web场的web.config中使用了连接字符串。不过,我还想加密另外一个自定义密码条目。我应该如何使用RSA密钥对其进行加密,而不必对其余配置进行加密。请告知,谢谢

例如:

  <appSettings>
        ...
    <add key="Host" value="www.foo.com" />
    <add key="Token" value="qwerqwre" />
    <add key="AccountId" value="123" />
    <add key="DepartmentId" value="456" />
    <add key="Password" value="asdfasdf" />
    <add key="SessionEmail" value="foo@foo.com" />
    <add key="DefaultFolder" value="789" />
  </appSettings>

...

不能对单个条目进行加密-基础结构只允许对整个配置部分进行加密


一个选项是将条目放在自己的配置部分并加密。

您可以将密码放在单独的部分中,并仅加密此部分。例如:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="secureAppSettings" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    </configSections>

    <appSettings>
        <add key="Host" value="www.foo.com" />
        <add key="Token" value="qwerqwre" />
        <add key="AccountId" value="123" />
        <add key="DepartmentId" value="456" />
        <add key="SessionEmail" value="foo@foo.com" />
        <add key="DefaultFolder" value="789" />  
    </appSettings>

    <secureAppSettings>
        <add key="Password" value="asdfasdf" />
    </secureAppSettings>  
</configuration>
加密后,文件将如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="secureAppSettings" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    </configSections>

    <appSettings>
        <add key="Host" value="www.foo.com" />
        <add key="Token" value="qwerqwre" />
        <add key="AccountId" value="123" />
        <add key="DepartmentId" value="456" />
        <add key="SessionEmail" value="foo@foo.com" />
        <add key="DefaultFolder" value="789" />  
    </appSettings>

    <secureAppSettings configProtectionProvider="DataProtectionConfigurationProvider">
        <EncryptedData>
            <CipherData>
                <CipherValue>AQAAANCMnd.......</CipherValue>
            </CipherData>
        </EncryptedData>
    </secureAppSettings>  
</configuration>
在c#和.Net 4.5中,我必须使用它来读取加密设置:

string password = ((System.Collections.Specialized.NameValueCollection)ConfigurationManager.GetSection("secureAppSettings"))["Password"];

但如果不是这样的话,效果会很好。

为什么不是ConfigurationManager.secureAppSettings[“密码”]?是什么使.NET可以将secureAppSettings部分视为appSettings的一部分?@Stan,它使用
NameValueSectionHandler
。我无法使用“ConfigurationManager.appSettings[“Password”];从“secureAppSettings”部分检索“Password”的值在.net 3.5 asp.net网站中。尝试使用以下选项:var section=ConfigurationManager.GetSection(“secureAppSettings”)作为NameValueCollection;var configPwd=节[“登录密码”];这几乎对我有用。我不得不在configSections节标记中使用不同的类型:您知道是否可以加密一个小节吗?这不是真的:@RyanMendoza-你需要再读一遍那篇文章。单个节点或单个条目无法加密-整个部分都需要加密。@Allen-我想我不同意。上面的答案显示了如何将条目移动到节,然后对该节进行加密。。。这基本上是我的第二句话。这不是一个答案,它是对答案的补充
var host = ConfigurationManager.AppSettings["Host"];
var password = ConfigurationManager.AppSettings["Password"];
string password = ((System.Collections.Specialized.NameValueCollection)ConfigurationManager.GetSection("secureAppSettings"))["Password"];