Как зашифровать 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 за ваш вклад.

Другие вопросы по тегам