2011-04-27 9 views
19

¿Hay una utilidad que va a cifrar una sección denominada configuración (o simplemente la sección connectionStrings) en un archivo app.config de una manera similar que se puede utilizar con aspnet_regiisweb.config archivos?sección connectionStrings Cifrado - utilidad para app.config

Sé que esto se puede hacer en código. Hay ejemplos de código, pero espero evitar escribir una aplicación para esto.

+0

Oded, curiosidad por saber la motivación específica para esto? – wal

+0

@wal: requisito empresarial urgente para encriptar todas las secciones de cadena de conexión. Hecho fácilmente en los archivos 'web.config' usando' aspnet_regiis', no tan fácil con 'app.config'. – Oded

+0

Si es urgente/rápido, entonces solo puedo sugerir cifrar el archivo completo marcando "Encriptar contenidos a datos seguros" en el archivo -> Propiedades Avanzadas. : | – wal

Respuesta

15

Usted puede intentar lo siguiente:

http://www.dotnetprofessional.com/blog/post/2008/03/03/Encrypt-sections-of-WebConfig-or-AppConfig.aspx

En resumen - cambiar el nombre del archivo app.config a web.config - el esquema es idéntico, por lo que aspnet_regiis obras. Cambie el nombre a app.config cuando haya terminado.

+0

-1 - Esto solo crea un archivo 'web.config' con una sección encriptada, que cuando se descifra está vacía. Ni siquiera mira el archivo 'app.config'. – Oded

+0

aspnet_regiis -pef Secretos. El editor dejó caer el. – RBZ

+0

Fue lo primero que intenté. No hace ni pizca de diferencia. Prueba antes de publicar. – Oded

4

vieja pregunta, pero aquí es la forma de Microsoft:

.NET 2.0: http://msdn.microsoft.com/en-us/library/89211k9b(v=vs.80).aspx

.NET 3.5: http://msdn.microsoft.com/en-us/library/ms254494(v=vs.90).aspx (sección "Cifrado de las secciones del archivo de configuración mediante la configuración protegida")

Alternar encriptación en el archivo app.config:

static void ToggleConfigEncryption(string exeConfigName) 
{ 
    // Takes the executable file name without the 
    // .config extension. 
    try 
    { 
     // Open the configuration file and retrieve 
     // the connectionStrings section. 
     Configuration config = ConfigurationManager. 
      OpenExeConfiguration(exeConfigName); 

     ConnectionStringsSection section = 
      config.GetSection("connectionStrings") 
      as ConnectionStringsSection; 

     if (section.SectionInformation.IsProtected) 
     { 
      // Remove encryption. 
      section.SectionInformation.UnprotectSection(); 
     } 
     else 
     { 
      // Encrypt the section. 
      section.SectionInformation.ProtectSection(
       "DataProtectionConfigurationProvider"); 
     } 
     // Save the current configuration. 
     config.Save(); 

     Console.WriteLine("Protected={0}", 
      section.SectionInformation.IsProtected); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 
+0

Realmente te perdiste el sentido de la pregunta. Y esos enlaces no abordan la pregunta en absoluto. – Oded

+0

¿Es el punto que quiere esto sin tener que escribir una aplicación en absoluto? – MichelZ

+0

Sí. Estaba buscando una utilidad existente. – Oded

4

Compile esta aplicación de consola y arrastre un archivo de configuración a ella. Escupirá una copia del archivo de configuración con sus cadenas de conexión encriptadas.

Tenga en cuenta que debe encriptar como el mismo usuario que consumirá el archivo de configuración.

using System; 
using System.Configuration; 
using System.IO; 

namespace ConnectionStringEncryptor 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      if (args.Length == 0) 
      { 
       throw new ArgumentException("Please supply a config file to encrypt"); 
      } 
      string originalConfigFilePath = args[0]; 
      AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", originalConfigFilePath); 
      Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
      ConnectionStringsSection connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings"); 
      connectionStringsSection.SectionInformation.ProtectSection("DataProtectionConfigurationProvider"); 
      config.SaveAs(originalConfigFilePath + ".encrypted"); 
     } 
    } 
} 
+1

Perfecto. No olvide agregar una referencia a System.Configuration. – mhenry1384

Cuestiones relacionadas