2012-07-24 14 views
31

Mam problem z zaszyfrowaniem ciągu połączenia w pliku app.config. Mam kod, który będzie chronił sekcję connectionStrings app.config, ale hasło jest nadal wyświetlane w postaci zwykłego tekstu.Szyfruj ciąg połączenia w app.config

Potrzebuję zaszyfrować ciąg połączenia tak, aby nie był w postaci zwykłego tekstu po wdrożeniu. Widzę podobne pytania na SO dla web.config, ale nie app.config.

+0

Należy pamiętać, że jeśli używasz ProtectSection() i zaszyfrować ConnectionString, po prostu można skopiować zaszyfrowany plik .config, używać go z mojego wniosku i zadzwonić UnprotectSection().Spowoduje to przywrócenie oryginalnego ciągiem połączeń w postaci zwykłego tekstu. –

Odpowiedz

19

Spójrz na This Article ma kilka bardzo przydatnych przykładów. Po prostu szukasz System.Configuration.SectionInformation.ProtectSection, aby ci pomóc.

mieć także okiem na Implementing Protected Configuration

+2

Czy ta metoda jest użyteczna w połączeniu z DataSet i TableAdapters? Wybierz opcję ConnectingStrings zapisaną w pliku app.config .., jeśli jej Encrypted nadal będzie automatycznie deszyfrowany? –

-1

może użyć algorytmu Rijndael, realizowane w klasie System.Security.Cryptography.Rijndael. Jest to bardzo potężny schemat szyfrujący, który konwertuje bajty na inne bajty w zależności od określonego hasła.

Spójrz na this example.

+6

Jak zabezpieczyć hasło? – Dan

35

Możesz łatwo zastosować to samo rozwiązanie, co plik web.config, wystarczy zmienić nazwę pliku app.config na web.config, zaszyfrować za pomocą narzędzia aspnet_regiis, a następnie zmienić jego nazwę z powrotem na app.config.

  1. Rename app.config do web.config
  2. otworzyć wiersz poleceń i wpisz:
    %windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" c:\<folder containing your web.config> (przystanek na poziomie folderu i nie umieścić końcowego znaku "\")
  3. zmiany nazwy pliku web.config powrót do app.config

Możesz otworzyć go w Notatniku, aby zobaczyć zaszyfrowany plik. W visual studio zobaczysz, że jest odszyfrowany. Możesz użyć swojego ciągu połączenia tak samo, jak gdyby nie był zaszyfrowany.

+4

Idealny! Prosto w sedno! i do odszyfrowania: % windir% \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_regiis -pdf "connectionStrings" c: \ folder – Alex

+4

To działało dla mnie i jest dużo łatwiejsze do wdrożenia niż zaakceptowana odpowiedź. – mgnoonan

+0

Krótkie i czyste instrukcje! Dzięki!!!! –

-4

ten kod jest przydatny w przypadku modelu First. 1 - stwórz taką klasę. (AADOEEntities1 jest Podmiotem modelu)

class DataContext 
{ 
    public static AADOEEntities1 Context; 
} 

2 - umieścić ten kod 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 - zestaw connectionString = "" w app.config.

+0

To wygląda na złe obejście problemu. Na przykład możesz użyć reflektora lub podobnego, aby uzyskać kod źródłowy z pliku binarnego -> zobaczysz poświadczenia – zozzancs

1

Określ lokalizację config Plik

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

jeśli chcesz zaszyfrować connectionStrings

config.ConnectionStrings.SectionInformation.ProtectSection(Nothing); 

musi zdawać sobie sprawę z aplikacji porcji config

więc jeśli chcesz zaszyfrować AppSettings

config.AppSettings.SectionInformation.ProtectSection(Nothing); 

enter image description here

+0

To działa, ale w moim przypadku musiałem zastąpić "Nic" na "DataProtectionConfigurationProvider" –

Powiązane problemy