19 jun 2011

Encriptación por el método Bifido en .NET


El método Bífido es un cifrado fraccionario. Es decir que cada letra viene representada por una o más letras o símbolos, y donde se trabaja con estos símbolos más que con las letras mismas.

El método comienza con la utilización de un alfabeto ordenado o desordenado (depende del grado de dificulad que se le pretenda dar en su descifrado) en una matriz 5x5.

En este ejemplo utilizaremos la siguiente matriz: 


Al ser una matriz de 5x5 nos vemos obligados a cifrar de la misma forma la I y la J. El contexto nos permitirá distinguir cual de las dos letras se pretendía cifrar.

Para cifrar el texto en claro se escriben los equivalentes numéricos de cada letra, utilizando sus "coordenadas".

Por ejemplo: HOLA MUNDO, genera las siguientes coordenadas (f,c) 233431113245331434, y para proceder con la encriptacion la cadena de coordenadas resultantes es dividida en dos:
233431113
245331434

y se forma una nueva cadena de coordenadas 22 34 35 43 33 11 14 13 34 las cuales formaran el nuevo mensaje encriptado GOPS NADCO.

Este método altera la frecuencia de los caracteres a diferencia de lo que ocurre por ejemplo con los cifrados monoalfabéticos.

La siguiente clase, hecha en vb.net realiza los pasos anteriormente descritos, esta comentada y creo que facilmente entendible

Public Class Bifido

    ' @web http://www.jc-mouse.net
    ' @author Mouse

    Dim matriz(5, 5) As Char
    Dim mensaje() As Char ' se guarda todo el mensaje
    Dim abc As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"


    Public Sub New()
        'la matriz esta formada por 25 letras, donde el caracter I=J
        matriz(1, 1) = "A" : matriz(1, 2) = "B" : matriz(1, 3) = "C" : matriz(1, 4) = "D" : matriz(1, 5) = "E"
        matriz(2, 1) = "F" : matriz(2, 2) = "G" : matriz(2, 3) = "H" : matriz(2, 4) = "I" : matriz(2, 5) = "K"
        matriz(3, 1) = "L" : matriz(3, 2) = "M" : matriz(3, 3) = "N" : matriz(3, 4) = "O" : matriz(3, 5) = "P"
        matriz(4, 1) = "Q" : matriz(4, 2) = "R" : matriz(4, 3) = "S" : matriz(4, 4) = "T" : matriz(4, 5) = "U"
        matriz(5, 1) = "V" : matriz(5, 2) = "W" : matriz(5, 3) = "X" : matriz(5, 4) = "Y" : matriz(5, 5) = "Z"
    End Sub

    Public Function Encriptar(ByVal texto As String) As String
        texto = Limpiar_Texto(texto)
        Dim pos_matriz As String = ""
        Dim encriptado As String = ""
        Dim fila As Integer
        Dim col As Integer
        'para cada caracter se extrae el par de numeros correspondientes de la matriz
        Dim c() As Char = texto.ToCharArray()
        For i = 0 To c.Length - 1
            pos_matriz = pos_matriz + getposicion(c(i))
        Next
        'Ahora se realiza el proceso de encriptacion        
        Dim x() As Char = pos_matriz.ToCharArray
        For i = 0 To x.Length / 2 - 1
            fila = Integer.Parse(x(i))
            col = Integer.Parse(x(i + x.Length / 2))
            encriptado = encriptado & matriz(fila, col)
        Next
        encriptado = Reconstruir_Mensaje(encriptado)
        Return encriptado
    End Function

    Public Function Desencriptar(ByVal t As String) As String
        t = Limpiar_Texto(t)
        Dim pos_matriz As String = ""
        Dim tmp1 As String = ""
        Dim tmp2 As String = ""
        Dim band As Boolean = True
        'para cada caracter se extrae el par de numeros correspondientes en la matriz
        For i = 0 To t.Length - 1
            pos_matriz = pos_matriz + getposicion(t.Substring(i, 1))
        Next
        'como la cadena de numeros se encuentra encriptada, se procede
        'a su nuevo ordenamiento
        For i = 0 To pos_matriz.Length - 1
            If band Then
                tmp1 = tmp1 & pos_matriz.Substring(i, 1)
                band = False
            Else
                tmp2 = tmp2 & pos_matriz.Substring(i, 1)
                band = True
            End If
        Next
        pos_matriz = tmp1 + tmp2
        tmp1 = ""
        Dim fila As Integer
        Dim col As Integer
        'ahora que ya se tiene a la cadena de numeros con el orden original
        'se procede a reconstruir el mensaje
        Dim x() As Char = pos_matriz.ToCharArray
        For i = 0 To x.Length - 1 Step 2
            fila = Integer.Parse(x(i))
            col = Integer.Parse(x(i + 1))
            tmp1 = tmp1 + matriz(fila, col).ToString
        Next
        tmp1 = Reconstruir_Mensaje(tmp1)
        Return tmp1
    End Function

    'obtiene la posicion de filas y columnas correspondientes al caracter 
    'pasado como parametro en la matriz
    Private Function getposicion(ByVal c As Char) As String
        Dim posicion As String = ""
        Dim band As Boolean = False
        If c = "J" Then ' Caso especial
            'se añade automaticamente con la posicion del caracter I
            posicion = "24"
        Else
            For i = 1 To 5
                For j = 1 To 5
                    If (c = matriz(i, j)) Then
                        posicion = i & j
                        band = True
                        If band Then Exit For
                    End If
                Next
                If band Then Exit For
            Next
        End If
        Return posicion
    End Function

    'encargado de limpiar el mensaje extrayendo solo las letras y
    'guardando los caracteres especiales para rearmar el mensaje despues
    Private Function Limpiar_Texto(ByVal t As String) As String
        t = t.ToUpper
        'descompone el mensaje en un array de caracteres
        mensaje = t.ToCharArray
        Dim tmp1 As String = ""
        'extrae solo las letras validas
        For i = 0 To mensaje.Length - 1
            Dim x As Integer = abc.IndexOf(mensaje(i))
            If x <> -1 Then 'es una letra valida
                tmp1 = tmp1 + mensaje(i)
            End If
        Next
        Return tmp1
    End Function

    'reconstruye el mensaje con las palabras encriptadas/desencriptadas
    'añadiendo los caracteres especiales que no son alterados
    Private Function Reconstruir_Mensaje(ByVal texto As String) As String
        Dim r_mensaje As String = ""
        Dim count As Integer = 0
        Dim k As Integer = mensaje.Length - 1
        Dim t() As Char = texto.ToCharArray
        For i = 0 To k
            Dim x As Integer = abc.IndexOf(mensaje(i))
            If x <> -1 Then
                r_mensaje = r_mensaje & t(count)
                count = count + 1
            Else
                r_mensaje = r_mensaje & mensaje(i)
            End If
        Next
        Return r_mensaje
    End Function

End Class

Su implementacion desde consola para la encriptacion tenemos:


Sub Main()
        Dim bifido As Bifido = New Bifido
        Dim s As String = bifido.Encriptar("Copyright 2011 - jc Mouse Bolivia " & vbCrLf & _
                        "Algoritmo de Encriptación Método Bífido" & vbCrLf & "All rights reserved")
        Console.WriteLine(s)
        Console.ReadKey()
    End Sub

y la salida en pantalla
Para desencriptar, solo utilizar el metodo apropiado ( desencriptar() ) y listo

8 jun 2011

Crear Themes para ASP.NET [*.skin]

Visual Studio nos permite crear Themes (Temas) para las paginas web de ASP, con estos Themes podemos personalizar la interfaz de nuestro WebSite ya que aplicamos un standar al tamaño, fuente, color, alineación, etc de los controles como Labels, Button, Panel, Calendar, etc, ademas de que nos ayuda a agilizar el trabajo de construcción del sitio web asi como su posterior mantenimiento.


Los Themes son similares a las hojas de estilo CSS ya qye ambos trabajan con los atributos de los controles y se aplican a cualquier página donde se llame al Theme o la Hoja de Estilo. Sin embargo, los SKIN se diferencian de las hojas de estilo por:

  • Los Themes a diferencia de los CSS pueden definir muchas propiedades de un control o una página, no sólo un conjunto específico de propiedades de estilo.
  • Los Themes pueden incluir archivos auxiliares, tales como gráficos, que no se pueden incluir en una hoja de estilos CSS.
  • Los Themes pueden incluir imagenes y hojas de estilo independientes de la aplicación web
 Codigo Fuente
Click para descargar

    Sesiones en ASP.NET


    Videotutorial bastante facil de seguir y realizar donde se explica una forma sencilla para el manejo de sesiones (Session) en ASP.NET utilizando el lenguaje de Visual Basic.

    Para este ejemplo se diseña una pequeña tienda on-line  donde el cliente va agregando productos al carrito de compras y al final puede ver una lista de todos los productos que eligio.

    El manejo de sesiones para utilizarlos como contenedores de datos (en este caso nombres de productos) es el uso mas habitual que se le da a las variables de Session, claro, en estas variables no se debe almacenar nunca cadenas de conexion, password, o datos personales y privados de los usuarios ya que estas podrian ser modificadas o robadas por otras personas.

    Nota: en el minuto 4,  donde dice "Si variable sesion no existe, entonces la crea", debe decir, "Si la variable de sesion no existe, crea un ArrayList vacio", error de dedo ;)

    4 jun 2011

    GridView con imagen en ASP

    En este videotutorial se muestra la forma de colocar una imagen en un control GridView en Visual Studio, Se utiliza una base de datos en MySQL, pero el tutorial tambien es valido para SQL como para una base de datos Access.

    Solamente se utiliza una tabla, que puede ser creada en cualquiera de las base de datos mencionadas, su estructura es la siguiente:


    -- 
    -- Base de datos: 'dbimagenes'
    -- 
    -- --------------------------------------------------------
    -- 
    -- Estructura de tabla para la tabla 'timagenes'
    -- 
    CREATE TABLE timagenes (
      Nombre varchar(60) default NULL,
      Foto varchar(60) default NULL
    )
    -- --------------------------------------------------------
    -- 
    -- Datos de la tabla "timagenes"
    -- 
    INSERT INTO timagenes VALUES ('Juan Melo Machuca', '/juan.jpg');
    INSERT INTO timagenes VALUES ('Benito Camela Suavecito', '/benito.jpg');
    INSERT INTO timagenes VALUES ('Ana Liza Melchoto', '/ana.jpg');

    Tambien necesitaras tres imagenes 'juan.jpg', 'benito.jpg' y 'ana.jpg'


    El Video es sumanente sencillo de seguir, ademas de corto, si tiene algun problema en seguir el video, presione "pausa", no me gusta hacer videos demasiado largos donde mas de la  mitad se pasa uno hablando de anecdotas personales o de cosas que no tienen nada que ver con el tutorial como vi en otro lado, sin más palabras, el video.

    6 may 2011

    Los diferentes lenguajes y la compilación

    Un lenguaje utilizado para escribir programas para computadora permite la comunicació Usuario-Máquina. Unos programas especiales llamados traductores traductores (Compilador, Interprete) convierten las instrucciones escritas en lenguajes de programación en lenguajes escritos en lenguaje máquina (0-1 bits) que ésta pueda entender.
    Lenguaje Maquina. Utiliza cadenas que son cadenas binarias (Serie de caracteres de 0 y 1) escritas en código de máquina o código binario, que son directamente intelegibles por su ordenador y puede obedecer inmediatamente sin traducción alguna.
    El codigo binario depende del hardware de la computadora.

    Lenguaje Objeto. Lenguaje o juego de instrucciones codificado a los cuales es traducido un lenguaje fuente por medio de un compilador, el lenguaje objeto es un lenguaje maquina directamente comprensible por su ordenador.
    Lenguaje de Bajo Nivel. Lenguaje básico o lenguaje en el cual cada instrucción se corresponde con un equivalente en codigo máquina, las instrucciones son una cadena de instrucciones alfabeticas.
    Lenguaje de Alto Nivel. Es un lenguaje natural, están diseñados para que las personas escriban y entiendan los programas de un modo más facil a los programas escritos en lenguaje máquina. El lenguaje de Alto Nivel es portable, es decir no dependen del hardware de la PC.

    Lenguaje Fuente. (Source Languaje) Un lenguaje de programación que no puede ser directamente procesado por el hardware de un ordenador y exige ser compilado y convertido en un programa objeto compuesto por instrucciones en lenguaje máquina que el ordenador pueda entender.

    Compilación

    La traducción de un lenguaje fuente de Alto Nivel a programas ejecutables en lenguaje máquina suele implicar más de un paso de traducción, el proceso mismo de compilación puede comprender un cierto número de pasos que traducen progresivamente el lenguaje a varias formas intermedias antes de producir el programa final.

    El proceso de traducción de programas de un lenguaje a otro equivalente, que realiza un compilador se conoce como "Compilación".

     
    Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | cna certification