Mostrando las entradas con la etiqueta Cifrado. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Cifrado. Mostrar todas las entradas

lunes, 2 de diciembre de 2024

Entrenamiento - Desarrollo de Aplicaciones Comerciales con Python (DACP 2025)

Desarrollo de Aplicaciones Comerciales con Python (DACP 2025)

Contenido del Programa:

Módulo 1: Fundamentos de Programación en Python con Aplicaciones de Consola

- El Lenguaje Python

- Estructuras de Datos

- Usando las Librerias Estandar

- Manejo de Archivos y Directorios

- Persistencia de Datos (Serialización)

- Compresión de Datos y Archivos

- Cifrado de Datos y Archivos

- Servicios Genéricos del Sistema Operativo

- Programación Asincrona, Paralelismo y Concurrencia (APC)

- Protocolos y Comunicación en Internet: HTTP, SMTP

- Acceso a Bases de Datos SQL Server con PyOdbc

Módulo 2: Desarrollo de Aplicaciones Windows en Python con PyQT

- Introducción a PyQT

- Trabajando con Diálogos en PyQT

- Usando Controles Basados en Items (Item Widgets)

- Usando Controles Basados en Modelos (Model Widgets)

- Personalizando el Control QTableView

- Mantenimiento de Datos usando QTableView

- Reportes e Impresiones en PyQT usando QPainter y QtPrintSupport

- Gráficos de Datos en PyQT usando PIL, QPainter y Matplotlib

- Aplicacion completa con Login y Menu Principal dinamico

- Programación Asincrona con QThread

Módulo 3: Desarrollo de Aplicaciones Web en Python con Django

- Introducción al Desarrollo Web: BackEnd (Django) y FrontEnd (HTML+JavaScript)

- Creando Aplicaciones de Consultas: Conectadas y Desconectadas

- Creando una Librería de JavaScript con Controles Básicos: Grid, TextList

- Creando una Librería de JavaScript con Controles Avanzados: TreeView, Grid+

- Mantenimiento (CRUD) de una Tabla con Imagen en Popups (SPA)

- Exportación de Datos a Texto, Excel, Word y PDF

- Creando Gráficos de Datos: Canvas y SVG

- Sistema con Login, TreeView, iFrame con Código Genérico

- Carrito de Compras con Login, Imágenes y Seguridad

- Trabajar con Archivos Grandes usando Bloques

- Trabajar con Miles de Registros: Consultar y Grabar

Módulo 4: Integracion de Aplicaciones usando Servicios Web y Web Sockets

- Introducción a los Servicios Web

- Servicios Web de Consulta de Datos

- Servicios de Mantenimiento de Datos (CRUD)

- Servicio de Manejo de Archivos por Bloques

- Creando un Servidor WebSocket en Python

- Creando un Cliente WebSocket en PyQT con QtWebSockets

- Creando un Cliente Web en JavaScript con WebSocket

- Manejo de Documentos en Tiempo Real

- Registro de Asistencia de Empleados en Tiempo Real

- Registro de Incidentes en Tiempo Real con Mapas


Datos del Programa:

Duración: 8 meses

Requisitos: Conocimientos de Programación y Bases de Datos

Modalidad: Online Virtual

Costo Mensual: 300 soles (USD 80 para extranjeros)

Horario: Martes y Jueves de 7:00 pm a 11:00 pm

Inicio: Martes 7 de Enero del 2025


Registro en el Programa:

Los interesados deberán enviar un mail a Luis.duenash@gmail.com:

Asunto: DACP 2025

Nombre Completo: XXXXXXXXXXXXX

Documento de Identidad: XXXXXX

Lugar de Procedencia: Ciudad/Pais

Ha llevado Cursos antes con Lduenas: Si/No

Si es nuevo como se entero: Blog/LinkedIn/Facebook/UnAlumno

lunes, 13 de mayo de 2019

Entrenamiento - Segundo Curso de C# WinForms

Segundo Curso de C# WinForms con Arquitectura Sin Capas con Cadenas

Contenido del Curso
Parte 1: Estructuras de Datos y Algoritmos en .NET
01. Introducción a .NET Framework: BCL y CLR
02. El Lenguaje C#: Estructuras de Control de Flujo
03. Estructuras de Datos en .NET 1: Arreglos, Listas, Pilas y Colas
04. Estructuras de Datos en .NET 2: Enumeraciones, Diccionarios, Arboles
05. Algoritmos en .NET Parte 1: Búsqueda y Ordenación de Datos
06. Algoritmos en .NET Parte 2: Cifrado y Compresión de Datos
Parte 2: Acceso a Datos con ADO.NET en WinForms
07. ADO.NET: Conexión, Comandos y Readers
08. Consultas de Datos: Filtros y Búsquedas
09. Mantenimiento de Datos y Cabecera-Detalle
10. Reportes, Gráficos, Impresiones, Exportaciones (Texto, Word, Excel y PDF)
11. Creación de Librerías de Controles WinForms
Parte 3: Programación Distribuida en .NET
12. Creando un Servicio WCF y Clientes WinForms
13. Creando un Servicio MVC (HTTP) y Clientes WinForms
14. Creando un Servidor Web Sockets y Clientes WinForms
15. Creando un Servidor HTTP y Clientes WinForms
16. Creando un Servidor TCP y Clientes WinForms

Materiales del Curso
- Documentación en PDFs de Microsoft Docs
- Libros en PDF de C# y .NET
- Videos de Cursos y Eventos de Microsoft
- Demos y Videos del Curso

Horario
- Miércoles y Viernes de 7:00 pm a 10:00 pm

Fecha de Inicio
- Miércoles 22 de Mayo del 2019

Duración del Curso
- Total: 72 horas
- Tiempo: 3 meses
- Frecuencia: 6 horas semanales (24 horas mensuales)

Inversión
- Alumnos: 250 nuevos soles el mes
- Alumnos que actualmente estan llevando Sábados y/o Domingos: 200 soles el mes

Forma de Pago
- Depósito en el Banco BCP (se enviará el número de cuenta a los que envíen su correo)

Contacto
Los interesados enviar un mail a Luis.duenash@gmail.com con los siguientes datos:
Asunto: Curso C# Winforms Miércoles y Viernes
Contenido del Mail:
- Nombre Completo
- Lugar de Trabajo o Estudio
- Tipo de Alumno: Nuevo / Antiguo ISIL / Antiguo Talleres

Forma de Registro
- Enviar su mail indicando los datos solicitados
- Se le enviará el número de cuenta BCP
- Realizar el depósito del mes y enviar constancia (foto o voucher)
- Se le enviará la dirección exacta

Lugar del Curso
Será cerca a la Av Canada con Av Rosa Toro, se le enviará la dirección exacta a todos los registrados una vez realizado el pago al Banco.

lunes, 3 de septiembre de 2018

Entrenamiento - Quinto Seminario de Desarrollo Web ASP.NET MVC & JavaScript

Quinto Seminario de Desarrollo Web ASP.NET MVC & JavaScript

Este Sábado se desarrollará el Quinto Seminario y los temas a tratar serán Compresión de Archivos y Cifrado de Datos en .NET.
Como ya es costumbre se les copiará Manuales, Libros y Papers en pdfs con los temas, además de los Demos (rar) y Videos (avi).

Seminario 5: Compresión de Archivos y Cifrado de Datos en .NET

1. Compresión de Archivos en .NET
1.1. Historia de la Compresión de Datos
1.2. Tipos y Algoritmos de Compresión
1.3. Clases para Comprimir Archivos en .NET
1.4. Comprimir y Descomprimir usando ZipFile, ZipArchive y ZipArchiveEntry
1.5. Comprimir y Descomprimir usando DeflateStream y GZipStream

2. Introducción a la Criptografía
2.1. Historia de la Criptografía
2.2. Criptografía, Criptología, Criptoanálisis y Cifrado
2.3. Tipos y Algoritmos de Cifrado
2.4. Modelo de Criptografía de .NET Framework

3. Cifrado Simétrico en .NET
3.1. Cifrar usando Data Encryption Standard (DES)
3.2. Cifrar usando Triple DES (TDES o 3DES)
3.3. Cifrar usando Advanced Encryption Standard (AES)

4. Cifrado Asimétrico en .NET
4.1. Cifrar usando RSA
4.2. Cifrar usando Algoritmo de Firmas Digitales (DSA)
4.3. Cifrar elementos XML con Certificados X.509

5. Usando Valores Hash en .NET
5.1. Valores Hash con MD5
5.2. Valores Hash con SHA1
5.3. Valores Hash con SHA256

Información
Día: Sábado 08 de Setiembre del 2018
Horario: 4:00 pm a 10:00 pm.
Registro y Pago: 4:00 pm a 4:30 pm.
Duración: 6 horas

Inversión
- 100 Soles solo para Alumnos que estan llevando actualmente Cursos los Sábados y/o Domingos
- 200 Soles para el resto (ex-alumnos y público en general)

Vacantes y Lugar
Participantes: 15 Mínimo - 25 Máximo
Lugar: Mi Domicilio (Zona Norte de Lima)
Nota: A los que no conocen el lugar solo si se registran les enviaré la dirección exacta.

Contacto
Los interesados enviar un mail a Luis.duenash@gmail.com con los siguientes datos:
Asunto: Quinto Seminario de Desarrollo Web ASP.NET MVC & JavaScript
Contenido del Mail:
- Nombre Completo
- Lugar de Trabajo o Estudio
- Alumno Regular de Talleres: Si / No

lunes, 25 de julio de 2016

Artículo: Temas a Aprender en un Lenguaje de Programación

Temas a Aprender en un Lenguaje de Programación

1. Introducción

Un Lenguaje de Programación es el medio por el cual los programadores dan ordenes al computador y sin importar que tipo de lenguaje estén usando todos ellos sirven para crear aplicaciones. En este artículo quiero compartir mi opinión sobre que temas deben aprenderse al momento de elegir un Lenguaje de Programación.

He tratado de hacer una especie de Syllabus genérico para cualquier Lenguaje de Programación, por ejemplo los temas lo puedes ver en cualquier lenguaje del servidor como C# en .NET, PHP, Phyton, Ruby, C++, etc. Pero también la mayoría de temas se pueden ver en JavaScript.

Este breve artículo servirá para que tanto estudiantes y profesionales sepan los temas que son necesarios y los mas útiles que deben conocer, por lo que se ha divido en 3 partes con 4 capítulos cada una: Básica, Intermedia y Avanzada.

2. Temas o Tópicos a Aprender

Parte Básica

1. Estructuras de Datos
1.1. Simples: Numéricas, Cadenas, Lógicas, Fecha, etc.
1.2. Complejas: Arreglos, Listas, Pilas, Colas, Arboles, etc.
1.2. Objetos: Clases, Intefaces, Propiedades, Métodos, Eventos, etc.

2. Estructuras de Control de Flujo
2.1. Condicionales: if, switch, case, etc.
2.2. Repetitivas o de Bucle: for, while, do..while, etc.
2.3. Control de Errores: try..catch

3. Creando Interfaces de Usuario (IU)
3.1. Formularios
3.2. Controles de Entrada: TextBox, Radio, Check
3.3. Controles de Ejecución: Button, LinkButton
3.4. Controles de Imagen: Image, ImageButton
3.4. Controles de Listas: ListBox, ComboBox
3.5. Controles de Vistas: GridView, TreeView, ListView
3.6. Otros Controles: Calendarios, Banners, Visores, etc.

4. Manejo de Entrada y Salida
4.1. Información del Sistema: Directorios, Rutas y Archivos
4.2. Lectura y Escritura: Archivos Secuenciales y Aleatorios
4.3. Codificación de Datos: Codificar y Decodificar datos
4.4. Manejo de Expresiones Regulares

Parte Intermedia

5. Acceso a Base de Datos (Conectado)
5.1. Conectarse a una Base de Datos
5.2. Ejecutar Comandos SQL: Select, Insert, Update, Delete
5.3. Trabajar con Procedimentos Almacenados

6. Manejo de Datos (Desconectado)
6.1. Consultas: Filtros y Búsquedas
6.2. Ordenación: Ascendente y Descendente
6.3. Paginación: Por Filas y Por Columnas
6.4. Transferencia: Importación y Exportación

7. Presentación o Visualización de Datos
7.1. Vistas: Tablas, Cabecera Detalle, Jerárquicas y Tabla Cruzada
7.1. Reportes: Por Código y Por Herramientas
7.2. Gráficos: Por Código y Por Controles
7.3. Impresiones: Presentación Preliminar, Configurar Pagina, Imprimir

8. Pruebas de la Aplicación
8.1. Pruebas Unitarias: Funcionalidad
8.2. Pruebas de Rendimiento: Velocidad
8.3. Pruebas de Disponibilidad: Continuidad
8.4. Pruebas de Seguridad: Protección

Parte Avanzada

9. Programación de la Reusabilidad
9.1. Módulos o Librerías de Clases
9.2. Módulos o Librerías de Controles

10. Programación Asíncrona
10.1. Subprocesamiento: Threads y ThreadPool en una CPU
10.2. Programación Paralela: Tareas en Múltiples CPU

11. Programación de Redes y Distribuida
11.1. Sockets: TCP, UDP
11.2. Web: HTTP (Get, Post, Put, Delete)
11.3. Web Sockets: WS
11.4. Servicios: RPC, SOAP, REST (HTTP)
11.5. Correos: IMAP, POP3, SMTP
11.6. Mensajería: AMQP, MQTT, STOMP
11.7. Archivos: FTP
11.8. Señales: STUN, TURN, ICE, NAT

12. Criptografía o Cifrado de Datos
12.1. Cifrado Simétrico: AES, DES, RC2, Rijndael, Triple DES, etc.
12.2. Cifrado Asimétrico: DSA, ECDiffieHellman, ECDSA, RSA, etc.
12.3. Valores Hash: MD5, RIPEMD160, SHA1, SHA256, SHA512, etc.
12.4. Firmas Digitales y Tokens

3. Comentario Final

Parte Básica

Los Institutos y Universidades que enseñan como curso oficial o electivo en pre-grado un Lenguaje de Programación deberían cubrir la parte básica, pero pasan mucho tiempo en los 3 primeros temas y se olvidan del manejo de entrada y salida, sobre todo del manejo de archivos y después cuando los alumnos son profesionales y trabajan no pueden leer cualquier tipo de archivo, excepto el de Texto: TXT, XML, JSON, CSV, pero no un Binario (DOC, XLS, EXE, DLL, etc)  o uno Comprimido (XLSX, DOCX, PPTX, etc.)

También noto muchos problemas en los programadores en los temas de Codificación de Datos (Encoding), Decodificación de Datos (Decoding) y Búsqueda de Patrones de Texto (Expresiones Regulares). Con una buena base educativa no tendría porque haber ningún tipo de problemas al desarrollar una aplicación en cualquier lenguaje.

Parte Intermedia

La parte intermedia esta dirigida a los profesionales que trabajan desarrollando aplicaciones y necesitan conocer los temas de acceso a datos (conectado) y manejo de datos (desconectado), presentación de datos y pruebas. Aquí la falla está en que se da mucho énfasis a la programación conectada pero No se entiende que ésta es la causante de que en las empresas "Los Sistemas están Lentos" porque "La Red está Lenta" porque "las aplicaciones realizan muchas conexiones" (miles por día), por lo que es "Indispensable" saber el manejo "Desconectado" con los datos.

En cuanto a la presentación de datos la mayoría de programadores solo saben "Herramientas de Reportes", por ejemplo "Crystal Reports" o "Report Viewer" (Reporting Services) o para crear Gráficos usan "Controles", abren instancias de aplicaciones como Word y Excel. Todas estas técnicas descritas son ineficientes ya que consumen mucha memoria y son lentas, hay otras formas de hacer reportes "super rápidos", por ejemplo en .NET para Windows se usa PrintDocument y en Web solo basta con HTML y JavaScript.

En cuanto a las Pruebas, los instructores solo saben enseñar "Pruebas Unitarias" que es lo mínimo que debe pedirse de la aplicación: que cumpla con la funcionalidad pedida, pero hay temas más técnicos como son la Performance o Rendimiento, la Disponibilidad como la tolerancia a Fallas de Red y la Seguridad (privacidad de datos, ataques, robo de información, etc.) que No se toman en cuenta. Es por esto que a cada momento vemos en todas partes "Sistemas Lentos", "Sistemas Caídos por Falta de Red", "Ataques a Sitios Web", "Robo de Datos", etc.

Parte Avanzada

En esta última parte si que estamos peor (según mi experiencia de mas de 25 años como programador e instructor), ya que los 4 últimos temas es poco probable que se enseñe en una capacitación tradicional, excepto Web HTTP (REST) y Servicios SOAP (porque está de moda), pero temas como crear tu propia librería de clases y controles o tu propio módulo de clases y controles Nunca se ve, solo se les enseña a usar lo que ya está hecho sin  siquiera ser selectivo con lo que se usa (solo extraer lo necesario del código o control).

Otro problema de muchos programadores es que No saben el "ABC" de la programación asíncrona, muchos piensan que solo se puede implementar en la web con AJAX, jQuery o cualquier Framework popular, cuando en la web en el lado del cliente puede usarse XHR (nativo) y en el servidor Threads, ThreadPool, Delegados-CallBacks, Tasks, etc. Es mas importante que apliques asíncrono al servidor que al cliente porque la del cliente es para dar una mejor "Experiencia de Usuario" y la del servidor es para que "No se quede Colgado", y al final vas a dar la peor experiencia al usuario.

En cuanto al tema de la programación de redes o distribuida, la mayoría desconoce el poder de los Sockets y Web Sockets para hacer comunicación bidireccional en tiempo real y solo saben la peor (Servicios SOAP: Unidireccional). También es necesario aprender a manejar archivos con FTP, correos con SMTP, colas con STOMP, Señales con STUN, etc.

Finalmente, el tema de la Seguridad es muy importante y parte de esta es el cifrado de datos como claves, contenido, archivos, etc. Es necesario conocer los 4 tipos de tareas criptográficas mas comunes: cifrado simétrico y cifrado asimétrico (bidireccionales), valores hash (unidireccionales) y Firmas Digitales.

En General

En General, el Comentario Final es que si queremos mejorar nuestro nivel sea que somos estudiantes o profesionales debemos saber cuales son los temas mas importantes en nuestra formación, siento que en todos los niveles de la educación: pre-grado (para estudiantes) y especialización (para profesionales) los temas que se enseñan no son los mas importantes para el trabajo. Se da mucho énfasis en patrones y reusabilidad ("Construye Fácil") pero no en lo mas importante: en Producción que sea "Veloz", "Seguro" y "Siempre Disponible".

Mi aporte en estos últimos años ha sido cambiar esa mentalidad de "lo fácil" (reusabilidad) por lo "fácil mas lo eficiente" (performance y si se puede reusabilidad), aunque me hubiese gustado llegar a mas gente (aunque sea en mi país), es por eso, que a través de este Blog y mi Canal de YouTube trato de compensar este déficit.

Espero que con este artículo logre contribuir a que los centros de enseñanza de Lenguajes o Herramientas de Programación tomen en cuenta los temas que son necesarios enseñar para tener mejores profesionales que nunca tengan problemas al momento de trabajar o si los tienen que los resuelvan de la mejor manera y lo mas rápido posible.

miércoles, 22 de octubre de 2014

El Libro del Día: La Biblia de Visual Basic .NET (Cap 2)

El Libro del Día: 2014-10-22

Titulo: La Biblia de Visual Basic .NET (Capítulo 2)
Autor: Luis Dueñas Huaroto
Editorial: Coredise
Nro Paginas: 111

Capítulo 2: Programando con Visual Basic .NET 2010
1. Trabajar con el Entorno de Windows y el Sistema
1.1. Obtener Información del Sistema
1.2. Obtener Directorios Especiales de Windows
1.3. Acceder al Registro de Windows
1.4. Trabajar con Procesos o Tareas del Sistema
2. Manejo de Entrada y Salida
2.1. Manejar Unidades, Directorios, Rutas y Archivos
2.2. Leer y Escribir en un Archivo
2.3. Dividir y Unir Archivos
2.4. Comprimir y Descomprimir un Archivo
3. Programación Orientada a Objetos (POO)
3.1. Introducción a la POO y MDD
3.2. Creando Bibliotecas de Clases
3.3. Creando una Aplicación que use las Bibliotecas de Clases
4. Programación Asíncrona y Paralelismo
4.1. Threads
4.2. Eventos Asíncronos
4.3. Delegados CallBacks
4.4. Programación Paralela
5. Criptografía o Cifrado de Datos
5.1. Cifrado Simétrico por Caracter
5.2. Cifrado Simétrico por Bloques
5.3. Valores Hash Criptográficos

Descarga:
Biblia_VisualBasicNET_Capitulo2

martes, 1 de julio de 2014

El Demo del Día: Proteger el Archivo de Configuración

Proteger el Archivo de Configuración

Problema de Seguridad

En .NET, el archivo de configuración de las aplicaciones (App.config o Web.config) se divide en secciones como connectionStrings para guardar cadenas de conexion o appSettings para guardar variables de aplicación, y muchas veces necesitamos proteger la información de una o ambas secciones para que no sea vista fácilmente, por ejemplo el usuario y clave de la cadena de conexión.

Solución al Problema de Seguridad

Podemos implementar un código que permita cifrar la cadena de conexión y luego descifrarla, pero sería muy trabajoso y no tan eficiente. Desde .NET Framework 2.0 podemos proteger una sección del archivo de configuración usando el método "ProtectSection" de la clase "SectionInformation", el cual marca la sección para que se cifre, de modo que se escriba en el disco en formato cifrado.

Sintaxis: ConfigurationElement.SectionInformation.ProtectSection(ProveedorProtección)

Los proveedores de protección incluidos son los siguientes: DPAPIProtectedConfigurationProvider y RSAProtectedConfigurationProvider.

Nota: Por defecto, sino se coloca ningún parámetro con el Proveedor de Protección (nulo o vacío), se
usa por defecto "RSAProtectedConfigurationProvider", pero en .NET Framework 2 y 3.5 puede generar un error, mejor es especificar el proveedor.

Más información: SectionInformation.ProtectSection (Método)

Crear una Aplicación Windows Forms de Prueba

Creamos una aplicación WinForms en C# llamada "Seguridad_AppConfig" y llamamos al formulario "frmPrueba" sobre el cual arrastramos 2 controles Label y 2 Textbox, similar a la siguiente figura:


Escribimos el siguiente código para el formulario:
using System;
using System.Drawing;
using System.Windows.Forms; //Form
using System.Data.SqlClient; //SqlConnection
using System.Configuration; //ConfigurationManager

namespace Seguridad_AppConfig
{
    public partial class frmPrueba : Form
    {
        public frmPrueba()
        {
            InitializeComponent();
        }

        private void cargarDatos(object sender, EventArgs e)
        {
            using (SqlConnection con = new SqlConnection
                (ConfigurationManager.ConnectionStrings["conNW"].ConnectionString))
            {
                con.Open();
                txtCadenaConexion.Text = con.ConnectionString;
                txtRutaLog.Text = ConfigurationManager.AppSettings["RutaLog"];
            }
        }
    }
}

Nota: La función controladora "cargarDatos" esta asociado al evento "load" del "formulario".

Archivo de Configuración

Definimos las siguiente secciones en el archivo de configuración (App.Config):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="conNW" providerName="System.Data.SqlClient" connectionString="uid=UsuarioNW;
      pwd=123456;data source=servidor;initial catalog=Northwind"/>
  </connectionStrings>
  <appSettings>
    <add key="RutaLog" value="C:\Logs\"/>
  </appSettings>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

Clase con Métodos para Proteger Secciones del Archivo de Configuración

Creamos una clase llamada: "ProtegerConfig" con 3 métodos estáticos:
1. ProtegerConexion: Cifra solo la sección "connectionStrings".
2. ProtegerVariables: Cifra solo la sección "appSettings".
3. ProtegerConexionVariables: Cifra las 2 secciones, "connectionStrings" y "appSettings".

using System;
using System.Configuration;
namespace Seguridad_AppConfig
{
    public class ProtegerConfig
    {
        public static void ProtegerConexion()
        {
            Configuration configura = ConfigurationManager.OpenExeConfiguration
                (ConfigurationUserLevel.None);
            if (!configura.ConnectionStrings.SectionInformation.IsProtected)
            {
                configura.ConnectionStrings.SectionInformation.ProtectSection
                    ("RSAProtectedConfigurationProvider");
                configura.Save(ConfigurationSaveMode.Full, true);
            }
        }

        public static void ProtegerVariables()
        {
            Configuration configura = ConfigurationManager.OpenExeConfiguration
                (ConfigurationUserLevel.None);
            if (!configura.AppSettings.SectionInformation.IsProtected)
            {
                configura.AppSettings.SectionInformation.ProtectSection
                    ("RSAProtectedConfigurationProvider");
                configura.Save(ConfigurationSaveMode.Full, true);
            }
        }

        public static void ProtegerConexionVariables()
        {
            Configuration configura = ConfigurationManager.OpenExeConfiguration
                (ConfigurationUserLevel.None);
            bool grabar = false;
            if (!configura.ConnectionStrings.SectionInformation.IsProtected)
            {
                configura.ConnectionStrings.SectionInformation.ProtectSection
                    ("RSAProtectedConfigurationProvider");
                grabar = true;
            }
            if (!configura.AppSettings.SectionInformation.IsProtected)
            {
                configura.AppSettings.SectionInformation.ProtectSection
                    ("RSAProtectedConfigurationProvider");
                grabar = true;
            }
            if(grabar) configura.Save(ConfigurationSaveMode.Full, true);
        }
    }
}

Nota: Antes de proteger una sección primero averiguamos si ya fue protegida, ya que si grabamos una sección que ya fue protegida generará una excepción.

Modificar la llamada en el método Main de la clase "Program"

Aumentar en el método Main() de la clase Program.cs la llamada a los 3 método estáticos:

using System;
using System.Windows.Forms;

namespace Seguridad_AppConfig
{
    static class Program
    {
        /// <summary>
        /// Punto de entrada principal para la aplicación.
        /// </summary>
        [STAThread]
        static void Main()
        {
            //ProtegerConfig.ProtegerConexion();
            //ProtegerConfig.ProtegerVariables();
            //ProtegerConfig.ProtegerConexionVariables();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmPrueba());
        }
    }
}

Nota: Están comentados para probar uno por uno y ver los resultados.

Probar la aplicación que cifra el archivo de configuración

Primero ejecutamos la aplicación con los métodos comentados y se mostrará la figura:


Ingresar al directorio donde se crea el ejecutable de la aplicación: "Seguridad_AppConfig\bin\Debug\" y abrir con el bloc de notas el archivo de configuración: "Seguridad_AppConfig.exe.config" observar que esta igual como se definió al inicio (su tamaño es 1kb).

Parar la ejecución, descomentar la línea ProtegerConfig.ProtegerConexion(); del método Main(), grabar y compilar nuevamente. Ejecutar el exe desde fuera del Visual Studio, es decir el archivo: "Seguridad_AppConfig.exe" de la carpeta bin y observar el archivo de configuración, que ha cambiado (su tamaño es ahora 58 kb) y se ha cifrado la sección "connectionStrings".

Parar la ejecución, descomentar la línea ProtegerConfig.ProtegerVariables(); del método Main() y comentar la anterior, grabar y compilar nuevamente. Ejecutar el exe desde fuera del Visual Studio, es decir el archivo: "Seguridad_AppConfig.exe" de la carpeta bin y observar el archivo de configuración, que ha cambiado (su tamaño es ahora 58 kb) y se ha cifrado la sección "appSettings".

Finalmente, parar la ejecución, descomentar la línea ProtegerConfig.ProtegerConexionVariables(); del método Main() y comentar la anterior, grabar y compilar nuevamente. Ejecutar el exe desde fuera del Visual Studio, es decir el archivo: "Seguridad_AppConfig.exe" de la carpeta bin y observar el archivo de configuración, que ha cambiado (su tamaño es ahora 59 kb) y se ha cifrado ambas secciones "connectionStrings" y "appSettings".

Comentario Final

Aunque el demo es sobre WinForms, se puede usar el mismo código en todos los tipos de aplicaciones (ASP .NET WebForms, WPF, WCF, Workflow, etc) para cifrar el archivo de configuración usando un algoritmo asimétrico como RSA. Espero les sirva.

Descarga:
Demo08_Seguridad_AppConfig