Как зашифровать user.settings
Я разрабатываю настольное приложение для Windows с C# .NET4.0 VS2010 для Windows 8.1. У меня есть ряд настроек, которые я сохраняю, используя механизм настроек.NET. Они имеют пользовательскую область, поэтому, если они установлены в приложении, они записываются в Users\username\AppData\Local\companyname\App.exe_URL_randomstuff\versionno\user.config.
Эти настройки включают некоторую информацию о регистрации пользователя, которую мне нужно скрыть. Мои исследования показывают, что я должен быть в состоянии зашифровать настройки с помощью RsaProtectedConfigurationProvider, но все примеры, которые я нашел для этого, относятся к шифрованию app.config, а не user.config (например, http://msdn.microsoft.com/en-us/library/system.configuration.rsaprotectedconfigurationprovider.aspx).
Поэтому мой вопрос: можно ли зашифровать user.config, и если да, то как? Я отмечаю, что когда я создаю экземпляр объекта System.Configuration.Configuration, я могу установить для ConfigurationUserLevel значение PerUserRoamingAndLocal. Когда я проверяю объект с помощью отладчика, он, кажется, ссылается на правильный файл user.config, но когда я перехожу к экземпляру ConfigurationSection для защиты, он возвращает ноль. Код выглядит так:
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.PerUserRoamingAndLocal);
ConfigurationSection connStrings = config.AppSettings;
connStrings.SectionInformation.ProtectSection(provider);
Я думаю, что config.AppSettings, вероятно, не правильно, но я не уверен, что заменить его.
Любой совет с благодарностью.
1 ответ
Работай сейчас. Я был прав, когда использовал ConfigurationUserLevel.PerUserRoamingAndLocal для доступа к моему файлу user.config. Проблема была с config.AppSettings. Я был на правильном пути, заменив его на config.GetSection("Progname.Properties.Settings"), но я неправильно назвал. Рабочий код теперь выглядит следующим образом:
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.PerUserRoamingAndLocal);
ConfigurationSection connStrings = config.GetSection("userSettings/Progname.Properties.Settings");
connStrings.SectionInformation.ProtectSection(provider);
"Progname" - это то, что называется вашей сборкой. Спасибо @neoistheone и @hatchet за ваш вклад.