domingo, 30 de junio de 2013

Tutorial: Encriptar un archivo en .Net y uso de FileSystemWatcher

Introducción:

En criptografía un cifrado, es un procedimiento que utilizando un algoritmo con cierta clave transforma un mensaje, sin atender a su estructura lingüística o significado, de tal forma que sea incomprensible o, al menos, difícil de comprender, a toda persona que no tenga la clave secreta del algoritmo que se usa para poder descifrarlo. Por tanto tenemos dos algoritmos (el de cifrado y el de descifrado) y dos claves (clave de cifrado y clave de descifrado). Estas dos claves pueden ser iguales (criptografía simétrica) o no (criptografía asimétrica).

Las diferencias entre ambas son en resumen:

Simétrica: 
  • Una misma clave para cifrado y decifrado.
  • Es más rápido.


Asimétrica:
  • Una clave pública para cifrar.
  • Una clave privada para decifrar.
  • Es más lento.
  • Es más seguro que los algoritmos simétricos.


La clase FileSystemWatcher

Escucha las notificaciones de cambio del sistema de archivos y provoca eventos cuando cambia un directorio o un archivo de un directorio. En otras palabras es un monitor de archivos.


Ejercicio práctico:

Para este tutorial de encriptar y desencriptar un archivo en .net, usaremos lo siguiente:
  • Visual Studio 2010
  • Lenguaje C#
  • Algoritmo de cifrado y decifrado DES
  • Este algoritmo necesita una clave de 8 bytes ejm: "12345678", "abcdefgh", "clave123"
  • Clase FileSystemWatcher


1. Lo primero será crear una aplicación de Consola en C# y darle nombre "ConsoleApplicationSeguro_SLN".

2. Crear 2 clases y nombrarlas: "Encriptar.cs" y "Watcher.cs".

3. La clase Watcher será nuestro monitor de archivos y tendrá el siguiente código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;

namespace ConsoleApplicationSeguro
{
    public class Watcher
    {
        public string llave { get; set; }
        public void Run(string ruta)
        {
            Console.WriteLine("Directorio a monitorear: " + ruta);

            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = ruta;

            // Monitorea cambios como último acceso y última modificación de archivos y directorios.
            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
               | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            
            // Seteamos el filtro para todos los archivos.
            watcher.Filter = "*.*";

            // Agrego manejadores de eventos "Handlers".
            watcher.Created += new FileSystemEventHandler(OnCreated);

            // Empieza el monitoreo.
            watcher.EnableRaisingEvents = true;

            // Preguntar si desea salir del monitoreo.
            Console.WriteLine("Presione \'q\' para salir del monitoreo.");
            while (Console.ReadLine() != "q") ;
        }

        // Definir los handlers.
        private void OnCreated(object source, FileSystemEventArgs e)
        {
            // Instrucciones que se debe realizar cuando se dispara el evento:
            Encriptar en = new Encriptar();
            Console.WriteLine("Archivo: " + e.FullPath);
            
            if (e.FullPath.Substring(e.FullPath.Length - 3, 3).ToString() != "cfr")
            {
                Console.WriteLine("Encriptando el archivo: " + e.FullPath);
                FileStream archivo = new FileStream(e.FullPath, FileMode.Open, FileAccess.ReadWrite);
                en.CifrarArchivo(archivo, llave);
            }
        }
    }
}

La clase "Encriptar.cs" se encarga de cifrar y decifrar archivos de todo tipo con el siguiente código:

domingo, 23 de junio de 2013

Tutorial Entity Framework y Linq (Parte 3)

En la Entrada anterior desarrollamos la capa DataAccess de nuestra aplicación en capas, pueden ver la entrada aquí: Parte 2

En la parte 3 desarrollaremos la capa BusinessLayer

Desarrollando la capa BusinessLayer:

Lo primero será agregar 2 clases en la capa BusinessLayer con nombres:

  • FacturaCab_Bus
  • FacturaDet_Bus
La clase FacturaCab_Bus contendrá el siguiente código:

Imports DataAccess
Imports Entities
Public Class FacturaCab_Bus
    Dim data As New FacturaCab_Data
    Public Function RecuperarTodas() As List(Of FacturaCab_Ent)
        Return data.RecuperarTodas()
    End Function

    Public Function BuscarUna(ByVal codigoFactura As Integer) As FacturaCab_Ent
        Return data.BuscarUna(codigoFactura)
    End Function

    Public Function Inserta(ByVal factura As FacturaCab_Ent) As Boolean
        Return data.Inserta(factura)
    End Function

    Public Function Modifica(ByVal factura As FacturaCab_Ent) As Boolean
        Return data.Modifica(factura)
    End Function

    Public Function Elimina(ByVal CodFactura As Integer) As Boolean
        Return data.Elimina(CodFactura)
    End Function
End Class


La clase FacturaDet_Bus contendrá el siguiente código:

Imports DataAccess
Imports Entities
Public Class FacturaDet_Bus
    Dim data As New FacturaDet_Data
    Public Function BuscarUna(ByVal codigoFactura As Integer) As List(Of FacturaDet_Ent)
        Return data.BuscarUna(codigoFactura)
    End Function

    Public Function Inserta(ByVal Detfactura As List(Of FacturaDet_Ent)) As Boolean
        Return data.Inserta(Detfactura)
    End Function

    Public Function Modifica(ByVal Detfactura As List(Of FacturaDet_Ent), ByVal CodFactura As Integer) As Boolean
        Return data.Modifica(Detfactura, CodFactura)
    End Function

    Public Function Elimina(ByVal CodFactura As Integer) As Boolean
        Return data.Elimina(CodFactura)
    End Function
End Class


Lo siguiente será crear nuestra interfaz de usuario en la capa WinUI.

Tutorial Entity Framework y Linq (Parte 2)

En la Entrada anterior desarrollamos el esqueleto de nuestra aplicación en capas, pueden ver la entrada aquí:
Parte 1

En la parte 2 desarrollaremos la capa Entities y la capa DataAccess.

Desarrollando la capa Entities:

Lo primero será agregar 2 clases en la capa Entities con nombres:

  • FacturaCab_Ent
  • FacturaDet_Ent
La clase FacturaCab_Ent contendrá las siguientes propiedades privadas y públicas, recuerda escribir "prop" y luego presiona tab 2 veces para que se te genere el código automáticamente.


    Private _IdFactura As Integer
    Public Property IdFactura() As Integer
        Get
            Return _IdFactura
        End Get
        Set(ByVal value As Integer)
            _IdFactura = value
        End Set
    End Property

    Private _CodCliente As String
    Public Property CodCliente() As String
        Get
            Return _CodCliente
        End Get
        Set(ByVal value As String)
            _CodCliente = value
        End Set
    End Property

    Private _FechaFact As DateTime
    Public Property FechaFact() As DateTime
        Get
            Return _FechaFact
        End Get
        Set(ByVal value As DateTime)
            _FechaFact = value
        End Set
    End Property

    Private _ValorFact As Double
    Public Property ValorFact() As Double
        Get
            Return _ValorFact
        End Get
        Set(ByVal value As Double)
            _ValorFact = value
        End Set
    End Property

La clase FacturaDet_Ent contendrá las siguientes propiedades privadas y públicas:

Tutorial VB.NET Entity Framework y Linq (Parte 1)

Introducción:
Lo que se conoce como arquitectura en capas es en realidad un estilo de programación donde el objetivo principal es separar los diferentes aspectos del desarrollo, tales como las cuestiones de presentación, lógica de negocio, mecanismos de almacenamiento, etc.

Arquitectura en Capas

Entity Framework permite a los desarrolladores crear aplicaciones de acceso a datos programando con un modelo de aplicaciones conceptuales en lugar de programar directamente con un esquema de almacenamiento relacional. El objetivo es reducir la cantidad de código y el mantenimiento necesarios para las aplicaciones orientadas a datos.


Language-Integrated Query (LINQ) es un conjunto de características presentado en Visual Studio 2008 que agrega capacidades de consulta eficaces a la sintaxis de los lenguajes C# y Visual Basic. LINQ incluye patrones estándar y de fácil aprendizaje para consultar y actualizar datos, y su tecnología se puede extender para utilizar potencialmente cualquier tipo de almacén de datos.



Requisitos previos para este tutorial:
  • Visual Studio 2008 o superior y Sql Server 2005 o superior.
  • Se realizara con los lenguajes de VB.Net.
  • Se usara la versión 4.0 de .Net Framework

martes, 11 de junio de 2013

Cursos Microsoft Gratuitos!

Se acuerdan del Programa Desarrollador Cinco Estrellas (DCE)?, pues bueno, este programa cerró sus puertas el día 12 de abril del 2012, para dar paso a Microsoft Virtual Academy en donde podrás seguir capacitandote, encontrando carreras completas y especializaciones en las últimas tecnologías de Microsoft tales como:

Desarrollo de .Net
Carrera Visual Studio
Computación en la Nube
Windows Phone
Windows Azure
Sql Server, etc


Aprovecha todos los recursos que Microsoft nos da a nuestra disposición, a través del siguiente enlace:


Para poder hacer carrera necesitaras registrarte con una cuenta Microsoft usando tu cuenta de correo hotmail.

Según vayas avanzando con los cursos, tu puntaje se irá incrementando. A continuación una imagen de mis avances:

Al finalizar una carrera o curso, podrás descargar e imprimir un certificado de finalización del curso o carrera, tal como el siguiente: