Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save intelguasoft/ff2065e7546399f5dede0e589ded8dfb to your computer and use it in GitHub Desktop.
Save intelguasoft/ff2065e7546399f5dede0e589ded8dfb to your computer and use it in GitHub Desktop.

Windows Forms: Como encriptar/desencritar la cadena de conexión en el archivo app.config usando C#

Esta nota te muestro cómo cifrar y descifrar la cadena de conexión en el archivo app.config en una aplicación de Windows Forms de C# .Net

Puede usar muchos algoritmos diferentes para cifrar y descifrar una cadena de texto. Sin embargo, dentro del alcance de este artículo, solo le muestro cómo usar el algoritmo TripleDes para cifrar y descifrar su cadena de conexión.

La cadena de conexión generalmente se almacena en app.config y rara vez se cifra. Si alguien abre el archivo app.config, verá la información de conexión del servidor de datos. Esto es muy peligroso si inician sesión en la base de datos para sabotear o editar datos sin usar software.

Por lo tanto, el cifrado de la cadena de conexión es esencial, le ayuda a proteger la información de conexión a la base de datos.

Debemos por empezar creando una aplicación del tipo Windows Forms como se muestra a continuación.

formulario para encriptar y desencriptar

Para cifrar y descifrar una cadena, debe crear los métodos de cifrado y descifrado utilizando el algoritmo TripleDes.

Cifrar cadena de conexión en app.config

Ahora necesita crear un método de cifrado que le permite cifrar la cadena con la clave como el siguiente código C#.

string Encrypt(string source, string key)
{
    using (TripleDESCryptoServiceProvider tripleDESCryptoService = new TripleDESCryptoServiceProvider())
    {
        using (MD5CryptoServiceProvider hashMD5Provider = new MD5CryptoServiceProvider())
        {
            byte[] byteHash = hashMD5Provider.ComputeHash(Encoding.UTF8.GetBytes(key));
            tripleDESCryptoService.Key = byteHash;
            tripleDESCryptoService.Mode = CipherMode.ECB;
            byte[] data = Encoding.UTF8.GetBytes(source);
            return Convert.ToBase64String(tripleDESCryptoService.CreateEncryptor().TransformFinalBlock(data, 0, data.Length));
        }
    }
}

Descifrar la cadena de conexión en app.config

Crear un método de descifrado le permite descifrar datos de las cadenas cifradas.

string Decrypt(string encrypt, string key)
{
    using (TripleDESCryptoServiceProvider tripleDESCryptoService = new TripleDESCryptoServiceProvider())
    {
        using (MD5CryptoServiceProvider hashMD5Provider = new MD5CryptoServiceProvider())
        {
            byte[] byteHash = hashMD5Provider.ComputeHash(Encoding.UTF8.GetBytes(key));
            tripleDESCryptoService.Key = byteHash;
            tripleDESCryptoService.Mode = CipherMode.ECB;
            byte[] data = Convert.FromBase64String(encrypt);
            return Encoding.UTF8.GetString(tripleDESCryptoService.CreateDecryptor().TransformFinalBlock(data, 0, data.Length));
        }
    }
}

Agregar un controlador de eventos de clic al botón Cifrar que le permite cifrar la cadena usando el algoritmo TripleDes.

private void btnEncrypt_Click(object sender, EventArgs e)
{
    txtEncrypt.Text = this.Encrypt(txtConnectionString.Text, "real-soft-solutions");
}

Agregar un controlador de eventos de clic al botón Descifrar que le permite descifrar la cadena usando el algoritmo TripleDes.

private void btnDecrypt_Click(object sender, EventArgs e)
{
    txtDecrypt.Text = this.Decrypt(txtEncrypt.Text, "real-soft-solutions");
}

Tenga en cuenta que la clave debe ser la misma para las funciones de cifrado y descifrado.

Después de terminar de encriptar la cadena de conexión, puede abrir el archivo app.config, luego agregar la cadena de conexión encriptada al archivo app.config como se muestra a continuación.

<connectionStrings>
  <add name="cn" connectionString="Mgye6RzGcs8gV04QGylkMkdOewkdx+J/YILu0hIv4QMQYtzCHRyIEyAMgN6hIJsC1lKy4yxNFAO+ri0Yf4iyyb3p5nmXixTo" providerName="System.Data.SqlClient"/>
</connectionStrings>

Puede crear una clase Helper que le permita obtener la cadena de conexión del archivo app.config en c# como se muestra a continuación.

static string _connectionString;
public static string ConnectionString
{
    get
    {
        if (_connectionString == null)
            _connectionString = Decrypt(ConfigurationManager.ConnectionStrings["cn"].ConnectionString, "real-soft-solutions");
        return _connectionString;
    }
}

Y no olvide agregar la referencia al System.Configuration.dll

Hasta la proxima...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment