Подтвердить что ты не робот

Как зашифровать одну запись в web.config

ASP.NET 4

Я использовал шифрование ключей RSA для строк подключения в 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="[email protected]" />
    <add key="DefaultFolder" value="789" />
  </appSettings>
4b9b3361

Ответ 1

Вы можете поместить пароль в отдельный раздел и зашифровать этот раздел. Например:

<?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="[email protected]" />
        <add key="DefaultFolder" value="789" />  
    </appSettings>

    <secureAppSettings>
        <add key="Password" value="asdfasdf" />
    </secureAppSettings>  
</configuration>

и затем (обратите внимание, что я использую DPAPI в моем примере, чтобы адаптировать поставщика для RSA):

aspnet_regiis -pef secureAppSettings . -prov DataProtectionConfigurationProvider

После зашифрования файл будет выглядеть так:

<?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="[email protected]" />
        <add key="DefaultFolder" value="789" />  
    </appSettings>

    <secureAppSettings configProtectionProvider="DataProtectionConfigurationProvider">
        <EncryptedData>
            <CipherData>
                <CipherValue>AQAAANCMnd.......</CipherValue>
            </CipherData>
        </EncryptedData>
    </secureAppSettings>  
</configuration>

Способ доступа к этим настройкам в вашем приложении после шифрования файла остается тем же и полностью прозрачным:

var host = ConfigurationManager.AppSettings["Host"];
var password = ConfigurationManager.AppSettings["Password"];

Ответ 2

Вы не можете зашифровать одну запись - инфраструктура допускает только шифрование целых разделов конфигурации.

Один из вариантов - поместить запись в свой собственный раздел конфигурации и зашифровать ее.

Ответ 3

В С# и .Net 4.5 я должен был использовать это, чтобы прочитать зашифрованный параметр:

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

но в противном случае работает.