Подтвердить что ты не робот

Шифровать строку подключения в app.config

У меня возникла проблема с шифрованием строки подключения в app.config. У меня есть код, который защитит раздел connectionStrings файла app.config, но пароль по-прежнему отображается в виде обычного текста.

Мне нужно зашифровать строку соединения, чтобы при развертывании не было обычного текста. Я вижу похожие вопросы о SO для web.config, но не app.config.

4b9b3361

Ответ 2

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

  • Переименуйте app.config в web.config
  • Откройте командную строку и введите:
    %windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" c:\<folder containing your web.config> (остановитесь на уровне папки и не ставьте конечный "\" )
  • переименовать web.config обратно в app.config

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

Ответ 3

Определите местоположение config Файл

Configuration config  = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

если вы хотите зашифровать connectionStrings

config.ConnectionStrings.SectionInformation.ProtectSection(Nothing);

вы должны знать о разделах конфигурации приложения

поэтому, если вы хотите зашифровать AppSettings

config.AppSettings.SectionInformation.ProtectSection(Nothing);

введите описание изображения здесь

Ответ 4

• Переименуйте App.config file to web.config<br> • Запустите командную строку от имени администратора:

Для шифрования:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" местоположение вашего проекта в кавычках и -prov "DataProtectionConfigurationProvider"

Пример:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" "D:\location\location1\location" -prov "DataProtectionConfigurationProvider" 

Для расшифровки:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" местоположение вашего проекта в кавычках.

Пример:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" "D:\location1\location" 

Для ошибки:

Добавьте это в Конфигурации xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"

Как это:

enter image description here

• Наконец, переименуйте web.config в App.Config

Ответ 5

Способ автоматизировать это:

ProjectSettings> Compile> BuildEvents> Редактировать пост-сборку

Вставьте код ниже:

SET ApplicationName=YourAppWithoutExtention
echo.
echo POST BUILD ACTIONS
echo ====================

if EXIST web.config (
    echo Deleting web.config
    DEL web.config
)

echo Renaming %ApplicationName%.exe.config to web.config
REN %ApplicationName%.exe.config web.config

echo Running aspnet_regis against webconfig
SET rpath=%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" "$(TargetDir)
SET rpath=%rpath:~0,-1%"
echo Path: %rpath%
%rpath%

echo Renaming web.config to %ApplicationName%.exe.config 
REN web.config %ApplicationName%.exe.config

echo Done.

Заменив "YourAppWithoutExtention" на имя вашего приложения.

Затем каждый раз при сборке он автоматически шифрует ваш app.config.

Ответ 6

кажется, что он действительно меняется, но я все еще могу видеть в текстовом виде значение для строки подключения, когда я декомпилирую его...

enter image description here

Ответ 7

Кроме того, если кто-то хочет зашифровать и расшифровать строки подключения в веб-фермах, выполните следующие действия:

  1. Создайте ключ RSA: aspnet_regiis -pc "MyKeys" -exp

  2. Предоставьте доступ для удостоверения пула приложений этому ключу: aspnet_regiis -pa "MyKeys" "IIS AppPool\ApplicationPoolName" -full

  3. Добавьте провайдера RSA в web.config: <configuration> <configProtectedData> <providers> <add name="MyProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" keyContainerName="MyKeys" useMachineContainer="true" /> </providers> </configProtectedData> </configuration>

  4. Зашифруйте файл web.config с помощью провайдера RSA: aspnet_regiis -pe "connectionStrings" -app "/MyApplication" -prov "MyProvider" Примечание. Вы можете использовать альтернативный синтаксис, подобный тому, который мы использовали для сценария с одним сервером. Пример: ASPNET_REGIIS -pef "connectionStrings" "D:\inetpub\wwwroot\applicationFolder" -prov "MyProvider"

  5. Откройте файл web.config и подтвердите, что строка подключения зашифрована
  6. Протестируйте сайт и подтвердите, что он работает
  7. Попробуйте расшифровать файл web.config. Создайте файл test.aspx с кодом ниже. Просмотрите его, чтобы увидеть расшифрованный файл
  8. Экспортируйте ключ RSA на диск C: aspnet_regiis -px "MyKeys" "c:\keys.xml" -pri
  9. Скопируйте этот файл на второй сервер в веб-ферме
  10. Импортируйте его на этот сервер: aspnet_regiis -pi "MyKeys" "c:\keys.xml"
  11. Предоставить доступ к этому ключу (аналогично шагу 2)
  12. Протестируйте приложение на втором сервере

Источник: Как зашифровать и расшифровать строки подключения

Ответ 8

Вы можете использовать алгоритм Rijndael, реализованный в классе System.Security.Cryptography.Rijndael. Это очень мощная шифрующая схема, которая преобразует байты в другие байты в зависимости от конкретного пароля.

Посмотрите этот пример.

Ответ 9

этот код полезен для модели First.  1 - создайте класс, подобный этому. (AADOEEntities1 - это модель сущности)

class DataContext
{
    public static AADOEEntities1 Context;
}

2 - поместите этот код в program.cs

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Data.Common;
using System.Data;
using System.Data.SqlClient;
using System.Data.EntityClient;
using System.Data.Metadata.Edm;
using System.IO;
namespace a
      {
        string providerName = "System.Data.SqlClient";
        string serverName = ".";
        string databaseName = "AADOE";

        // Initialize the connection string builder for the
        // underlying provider.
        SqlConnectionStringBuilder sqlBuilder =
            new SqlConnectionStringBuilder();

        // Set the properties for the data source.
        sqlBuilder.DataSource = serverName;
        sqlBuilder.InitialCatalog = databaseName;
        sqlBuilder.IntegratedSecurity = true;
        sqlBuilder.UserID = "sa";
        sqlBuilder.Password = "123456";

        // Build the SqlConnection connection string.
        string providerString = sqlBuilder.ToString();

        // Initialize the EntityConnectionStringBuilder.
        EntityConnectionStringBuilder entityBuilder =
            new EntityConnectionStringBuilder();

        //Set the provider name.
        entityBuilder.Provider = providerName;

        // Set the provider-specific connection string.
        entityBuilder.ProviderConnectionString = providerString;

        // Set the Metadata location.
        entityBuilder.Metadata = @"res://*/mdlAADOE.csdl|
                        res://*/mdlAADOE.ssdl|
                        res://*/mdlAADOE.msl";

        EntityConnection conn =
            new EntityConnection(entityBuilder.ToString());

        DataContext.Context = new AADOEEntities1(conn);

        Application.Run(new frmLogin());
} 

3 - установите connectionstring = "" в app.config.