Ответ 1
Посмотрите Эта статья содержит несколько очень полезных примеров. Вы в основном ищете System.Configuration.SectionInformation.ProtectSection
, чтобы помочь вам здесь.
Также загляните в Реализация защищенной конфигурации
У меня возникла проблема с шифрованием строки подключения в app.config. У меня есть код, который защитит раздел connectionStrings файла app.config, но пароль по-прежнему отображается в виде обычного текста.
Мне нужно зашифровать строку соединения, чтобы при развертывании не было обычного текста. Я вижу похожие вопросы о SO для web.config, но не app.config.
Посмотрите Эта статья содержит несколько очень полезных примеров. Вы в основном ищете System.Configuration.SectionInformation.ProtectSection
, чтобы помочь вам здесь.
Также загляните в Реализация защищенной конфигурации
Вы можете легко применить то же самое решение, что и web.config, вам просто нужно переименовать ваш app.config в web.config, зашифровать с помощью инструмента aspnet_regiis и затем переименовать его обратно в app.config.
%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" c:\<folder containing your web.config>
(остановитесь на уровне папки и не ставьте конечный "\" )Вы можете открыть его в блокноте, чтобы просмотреть зашифрованный файл. В визуальной студии вы увидите ее расшифровку. Вы можете использовать свою строку соединения так же, как если бы она не была зашифрована.
Определите местоположение config
Файл
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
если вы хотите зашифровать connectionStrings
config.ConnectionStrings.SectionInformation.ProtectSection(Nothing);
вы должны знать о разделах конфигурации приложения
поэтому, если вы хотите зашифровать AppSettings
config.AppSettings.SectionInformation.ProtectSection(Nothing);
• Переименуйте 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"
Как это:
• Наконец, переименуйте web.config
в App.Config
Способ автоматизировать это:
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.
кажется, что он действительно меняется, но я все еще могу видеть в текстовом виде значение для строки подключения, когда я декомпилирую его...
Кроме того, если кто-то хочет зашифровать и расшифровать строки подключения в веб-фермах, выполните следующие действия:
Создайте ключ RSA:
aspnet_regiis -pc "MyKeys" -exp
Предоставьте доступ для удостоверения пула приложений этому ключу:
aspnet_regiis -pa "MyKeys" "IIS AppPool\ApplicationPoolName" -full
Добавьте провайдера 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>
Зашифруйте файл web.config с помощью провайдера RSA:
aspnet_regiis -pe "connectionStrings" -app "/MyApplication" -prov "MyProvider"
Примечание. Вы можете использовать альтернативный синтаксис, подобный тому, который мы использовали для сценария с одним сервером. Пример:
ASPNET_REGIIS -pef "connectionStrings" "D:\inetpub\wwwroot\applicationFolder" -prov "MyProvider"
aspnet_regiis -px "MyKeys" "c:\keys.xml" -pri
aspnet_regiis -pi "MyKeys" "c:\keys.xml"
Вы можете использовать алгоритм Rijndael, реализованный в классе System.Security.Cryptography.Rijndael
. Это очень мощная шифрующая схема, которая преобразует байты в другие байты в зависимости от конкретного пароля.
Посмотрите этот пример.
этот код полезен для модели 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.