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.