Файл конфигурации - шифрование строки подключения - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь разработать приложение Winform C#, которое подключается к базе данных SQL.

До сих пор мне удалось переместить наиболее важные данные из моего файла конфигурации XML в внешний XML файл конфигурации, но это все.

Последнее, что мне нужно сделать, это зашифровать этот файл, так как многие люди будут иметь доступ к каталогу, в котором находится приложение.

Мой основной файл конфигурации [APP] выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings configSource="conn_string.config"/>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

И есть мой внешний файл конфигурации [conn_string], в котором я пытаюсь скрыть строку подключения:

<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>
<add name="myConnectionStringName"
providerName="System.Data.SqlClient"
connectionString="Data Source=ServerName;Initial 
Catalog=InitialDatabaseName;User=UserName;Password=MyPassword;Application Name=MyAppName" />
</connectionStrings>

Теперь, когда дело доходит до шифрования, я прочитал, что asp -netregiis.exe ищет только файл с именем "web", поэтому я временно переименовал свой файл "conn_string" в "web"

и попробовал шифрование (через VS командной строки разработчика):

aspnet_regiis -pef "connectionStrings" "path_to_my_conn_string_file"

Результат: ~ Мой перевод

The web.config file doesn't contain a configuration tag 

Поэтому я добавил один из них:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="myConnectionStringName"
providerName="System.Data.SqlClient"
connectionString="Data Source=ServerName;Initial 
Catalog=InitialDatabaseName;User=UserName;Password=MyPassword;Application Name=MyAppName" />
</connectionStrings>
</configuration>

Теперь жалуется на: ~ Опять мой перевод

* 10 25 *

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Я бы посоветовал поместить строку подключения в переменную системной среды.

В Windows 10 (предположительно) в поле «Тип поиска» в разделе «Редактировать переменные системной среды»

enter image description here

Нажмите кнопку Переменные среды.

enter image description here

Затем добавьте новую переменную среды системы в нижней части. Не используйте верхнюю или только для входа в систему.

enter image description here

Вставьте строку подключения и нажмите Ok.

enter image description here

Этот класс здесь называется EnvironmentVariableHelper.cs:

using System;
using System.Collections.Generic;
using System.Text;

namespace DataJuggler.Core.UltimateHelper
{
    public class EnvironmentVariableHelper
    {

        #region Methods

            #region GetEnvironmentVariableValue(string variableName)
            /// <summary>
            /// This method is used to get an environment value
            /// </summary>
            /// <param name="variableName"></param>
            /// <returns></returns>
            public static string GetEnvironmentVariableValue(string variableName)
            {
                // initial value
                string value = "";

                try
                {
                    if (Environment.OSVersion.Platform == PlatformID.Win32NT)
                    {
                        // Change the directory to %WINDIR%
                        value = Environment.GetEnvironmentVariable(variableName);
                    }
                }
                catch (Exception error)
                {
                    // for debugging only, do something else with it if you need to
                    DebugHelper.WriteDebugError("GetEnvironmentVariableValue", "GetEnvironmentVariableValue", error);
                }

                // return value
                return value;
            }
            #endregion

        #endregion

    }
}

Чтобы использовать его:

ConnectionString = EnvironmentVariableHelper.GetEnvironmentVariableValue(ConnectionName);

Вы можете скопировать класс для вашего проекта, или вы можете использовать пакет Nuget:

DataJuggler.Core.UltimateHelper. Net Framework

DataJuggler.UltimateHelper.Core. Net Core

. Net Framework версия вышла в 2012 году, прежде чем я когда-либо слышал о. Net Ядро является причиной путаницы с именами.

И если вы хотите зашифровать его, у меня есть еще один набор Nuget пакеты:

DataJuggler.Core.Cryptography

DataJuggler. Net .Cryptography

// Encrypt
string encrypted = CryptographyHelper.EncryptString(textToEncrypt, keyCode);

// Decrypt
string decrypted = CryptographyHelper.DecryptString(textToDecrypt, keyCode);

Мой Git Проект-концентратор имеет все источники, если вы этого не сделаете хочу использовать Nuget:

https://github.com/DataJuggler?tab=repositories

И последний проект, который вы считаете полезным, у меня есть инструмент под названием Connection String Builder, который ich - это пример проекта DataTier. Net, расположенный выше.

enter image description here

0 голосов
/ 13 марта 2020

Шаги, которые вы предпринимаете с использованием aspnet_Regiis, действительно предназначены для веб-приложений, размещенных на Inte rnet Information Server (IIS). Файл, который он ищет, действительно "web.config". Вы упомянули, что создаваемое приложение является приложением winforms, а не веб-приложением. Обычные приложения winforms обычно настраиваются через файл с именем «app.config». Visual Studio может создать для вас базовый app.config в зависимости от используемой версии.

Вы можете "обмануть" aspnet_Regiis, чтобы зашифровать ваш файл конфигурации с помощью временно переименования app.config в web.config, а затем вызвать aspnet_regiis с флагом, указывающим на точный путь нашего " phony "web.config:

Для простоты предположим, что ваш начальный app.config находится в c: \ MyPrograms \ MyApp.

  1. Переименуйте app.config в web.config.
  2. В командной строке администратора установите для текущего каталога значение c: \ windows \ micrsoft.net \ framework \ v4. 0.30319
  3. Вызовите aspnet_regiis, используя ключ "-pef", чтобы инструктировать инструмент для шифрования определенного раздела вашего web.config:

    aspnet_regiis -pef "connectionStrings" c : \ MyPrograms \ MyApp

  4. Если вы видите сообщение «Успешно», переименуйте ваш web.config обратно в app.config и запустите ваше приложение. . NET должен автоматически расшифровывать вашу строку подключения во время выполнения на этом компьютере .

Если вам нужно разместить это приложение на других компьютерах, вам может потребоваться установить общий ключ шифрования, который можно установить на других компьютерах, а также определить поставщика в Интернете. Конфиг, который использует этот ключ. Но пока давайте запустим процесс basi c локально, а затем позаботимся о других компонентах, когда узнаем, что эта часть работает.

Надеюсь, это поможет!

...