Inicio > Uncategorized > Encriptar la cadena de conexión

Encriptar la cadena de conexión

Martes, 5 de junio de 2007 Dejar un comentario Ir a comentarios

Una de las recomendaciones que se hacen al trabajar con datos en .Net es: “escribe la cadena de conexión en un archivo de configuración, no lo escribas en el código”. Esto significa que la o las cadenas de conexión a todas las bases de datos que usemos en nuestro proyecto deben estar separadas del código fuente, en un archivo de configuración (App.config en el caso de una aplicación Windows o Web.config en el caso de una aplicación web).

Entonces, yo escribo en mi archivo de configuración, la siguiente sección:

<?xml version=”1.0encoding=”utf-8?>
<configuration>
<connectionStrings>
<add name=“strCon” connectionString=“DataSource=(local);Initial Catalog=Pubs;Integrated Security=True” />
</connectionStrings>
</configuration>

Este ejemplo es el de un archivo App.config, y es obviamente un archivo de ejemplo, muy sencillo. Luego, en mi aplicación debo importar el siguiente namespace (hay que agragarlo a las referencias del proyecto también):

using System.Configuration;

Y ahora, para encriptar la cadena de conexión escribo el siguiente código:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConnectionStringsSection sect = config.ConnectionStrings;
sect.SectionInformation.ProtectSection(“DataProtectionConfigurationProvider“);
config.Save();

Y para desencriptarlo uso este código:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConnectionStringsSection sect = config.ConnectionStrings;
if (sect.SectionInformation.IsProtected){
    sect.SectionInformation.UnprotectSection();
    config.Save();
}

El resultado del archivo de configuración encriptado debe ser el siguiente:

<?xml version=”1.0encoding=”utf-8?>
<configuration>
<connectionStrings configProtectionProvider=“DataProtectionConfigurationProvider”>
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA7461I+ToRU2uzk+aQdmrDQQAAAACAAAAAAADZgAAqAAAABAAAABMh/0ClY1svfK8dFXNTnDoAAAAAASAAACgAAAAEAAAAF
D+rETsqSKZZN//tqMoOH5QAQAA+lKl+gZANcW/C3Sm0jyNAyITWBkWZ1Am6gHcb1h9+enrJQ2p5+eIaJkqza8ja9RbvALosoQVo2NBJnA0k1LUopNIzTy8FDaftrdZSlMbVtqYrzwO7g0lvdnkaBNUI
cZo5LKhfIOpGIIoNId09SvlWEcDxn8rbBj5yKVzId4XOhtGLVFqt5+XkWqymFGlcnifXKdBK7DCtwKOVK2IYI/B5lyKleiG2g5ePSCMnqpsgkmuSUNVLcg0ONkGkIFSXBbUUHm8/emnisHoyER2Eb5Tk
4b346N8TiTZS7HqmOnqGBD323woeiFKuZNpwh9fbFrqo+Z+Wotrh2Ka6rxTdhAGutFJVWwOlVIOtOT98FcCZdhLHFhXm0Mh08RI+AUWbNJ4+1vkecuWC7GIxU+6uv7iG8I/Qz/BV0sb0gDDu4Fj0
Wa06+iw/xwjCTRkFXcyiHzNFAAAAABOwzLCJE+F+o3Dl50vBd4xKtMy</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
</configuration>

Pues bien, ese es todo el proceso, sencillo no?. La única recomendación es que el proceso de encriptación se debe realizar en el equipo en el que se desea, es decir si lo encriptas en una pc y luego lo quieres utilizar encriptado en otra pc, no funcionará, sobretodo si es una aplicación web.

Con este proceso, no hay demora en la lectura de la sección y baja en la performance, todo esta controlado por el FrameWork.

Aclaración: En algunos casos no se puede apreciar el resultado en un proyecto windows, por lo que recomiendo que generen la aplicación y prueben sobre el assembly generado.

Saludos.

Categories: Uncategorized
 

  1. Karina
    Lunes, 13 de agosto de 2007 a las 17:15 | #1

    Hola h@nz , esta muy bien lo que haces al encriptar la sección conectionstring, pero tu sabes como encriptar la sección APPSETTINGS?

  2. Armando Ventura
    Jueves, 7 de febrero de 2008 a las 22:26 | #2

    Pregunta
    si encripto de esta manera mi app.config, cualquier usuario que entre a la pc, puede desencriptarlo si corriera un programa con el trozo de codigo para desencriptar mi app.config.

  3. Didier
    Jueves, 14 de febrero de 2008 a las 23:35 | #3

    Para Armando Ventura, he probado y si se puede desencriptar la cadena con el mismo codigo …

  4. Cesar
    Jueves, 11 de diciembre de 2008 a las 14:01 | #4

    Tengo una gran duda! tengo una pequenia aplicacion una agenda! y dentro de ella tengo una app.config y un Form solo eso, creo la aplicacion funciona de maravilla! pero el agenda.exe no me funciona en otra maquina porque ? ahora si junto con el ejecutable coloco el archivo con agendaProject.vshost.exe, estando los dos juntos funciona no entiendo ? como puedo hacer un ejecutable con un solo archivo y que corra en donde lo corra funcione ?

  5. C#ristian
    Jueves, 22 de julio de 2010 a las 20:57 | #5

    Cómo sería para una aplicación web? Le he dado vueltas y no encuentro la forma, solo excepciones me saltan, pero creo que es porque todos los ejemplos (plageados, claro) que encuentro en blogs se refieren a aplicaciones windows.

  6. C#ristian
    Jueves, 22 de julio de 2010 a las 21:05 | #6

    Ya encontré cómo, después de darme verga con un montón de pruebas, llegué a esto:

    //para encriptar
    Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
    ConfigurationSection section = config.Sections["connectionStrings"];
    section.SectionInformation.ProtectSection(“DataProtectionConfigurationProvider”);
    config.Save();

    //para desencriptar
    Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
    ConfigurationSection section = config.Sections["connectionStrings"];
    section.SectionInformation.UnprotectSection();
    config.Save();

    Claro, esto es solo para la sección connectionStrings.

  1. Jueves, 31 de enero de 2008 a las 19:39 | #1
  2. Jueves, 31 de enero de 2008 a las 19:39 | #2