2013-05-13 3 views
8

Мне нужно зашифровать/дешифровать пользовательские разделы в файле app.config, а также файл web.config. Я прочитал, что aspnet_regiis можно использовать для web.config, но мне нужно сделать это программно.Зашифровать пользовательский раздел в файле app/web.config

После открытия mappedExeConfiguration, я указать раздел следующим образом:

ConfigurationSection connStrings = config.AppSettings; 

для шифрования/дешифрования раздел AppSettings.

Как определить имя настраиваемого раздела? Когда я набираю имя моего настраиваемого раздела после объекта configurationSection, intelli-sense не распознает его. (Он признает только несколько хорошо известных разделов)

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

Пример:

например.

<Configuration> 
    <MyCustomTag> 
     <... data /> 
    </MyCustomTag> 
</Configuration> 

где MyCustomTag - это раздел, который мне нужно зашифровать/расшифровать.

ответ

2

От CommandPromt из VS 2010 вызова команды для шифрования:

%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -pef "connectionStrings" "YOUR_PROJECT_NAME" -prov "DataProtectionConfigurationProvider" 

Расшифровать:

%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -pdf "connectionStrings" "YOUR_PROJECT_NAME" 
+0

Мне нужно сделать это программно. Кроме того, на сайте развертывания не должно быть aspnet_regiis. – Karan

+0

Это работает из стандартной командной строки, а не только из командной строки VS 2010. Мне было проще всего подключиться к корню моего сайта и использовать команды с пустыми строками для YOUR_PROJECT_NAME. – user489998

0

Чтобы зашифровать, используйте командную строку, отправленный в HaGever является ответом.

This question имеет пример кода для чтения файлов app.config из кода. Код не работает, потому что ключ шифрования не был установлен на машине, используемой для дешифрования app.config.

+0

Мне нужно сделать это программно. Кроме того, на сайте развертывания не должно быть aspnet_regiis. – Karan

4

Я достиг этого, используя код, который я нашел в http://www.a2zmenu.com/Blogs/CSharp/How-to-encrypt-configuration-file.aspx

Я бы вставить свой код в, но в основном это в значительной степени совпадает с кодом на этой веб-странице, для изменения названий приложений, за исключением.

Редактировать: для пользовательского раздела я не уверен, поскольку мне не нужно было его использовать, но вы могли бы изучить, что дает объект конфигурации в следующей строке.

Configuration config = ConfigurationManager.OpenExeConfiguration(GetAppPath() + "MyAppName.exe"); 

Вот мой весь метод UpdateKey(), который теперь я понимаю, что немного адаптировался с веб-страницы. Может быть, это помогает.

public static void UpdateKey(string key, string newValue) 
{ 
    Configuration config = ConfigurationManager.OpenExeConfiguration(GetAppPath() + "MyAppName.exe"); 
    config.AppSettings.Settings[key].Value = newValue; 
    config.Save(); 
} 

Тогда после того, как я спас мой ключ (ы), я называю

EncryptAppSettings("appSettings"); 

и, возможно, вы можете адаптировать значение парам, чтобы удовлетворить там тоже.

+0

Спасибо.Выглядит хорошо. – Karan

+0

Вопрос обновлен. Однако он просто показывает, как зашифровать раздел appSettings, а не настраиваемый раздел. В моем случае я хочу зашифровать собственный тег в , например. <Конфигурация><... data> Karan

+0

Отредактирован мой ответ. –

Смежные вопросы