Как зашифровать одну запись в web.config - PullRequest
39 голосов
/ 03 июня 2011

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="foo@foo.com" />
    <add key="DefaultFolder" value="789" />
  </appSettings>

Ответы [ 3 ]

60 голосов
/ 03 июня 2011

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

<?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>

и затем (обратите внимание, что я использую 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="foo@foo.com" />
        <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"];
12 голосов
/ 25 ноября 2013

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

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

, но в остальном работает угощение.

7 голосов
/ 03 июня 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...