lunes, 23 de julio de 2012

Personalizando el control Menú de ASP Net - Modificando la Flecha

En algunas ocasiones se presentan proyectos que no revisten una complejidad alta, por tanto se planean en tiempo record, además de tener limitaciones de presupuesto, este tipo de situaciones no permite recurrir a nada que revista complejidad en su implementación, es en esos casos cuando se recurre al uso de los controles básicos que trae ASP Net.

En esta ocasión, se hizo necesario el uso del control Menú que viene de serie con Visual Studio, lo particular de la situación es que según el esquema de colores que se planteo suponía un pequeño problema, y es que la flecha que usa el control Menú para indicar que un elemento tiene subelementos es de color negro por defecto.
Manos a la obra:

Si bien no hay mucha información al respecto, la susodicha flecha resulto ser un recurso incrustado en el control, de manera que el primer paso es conseguir la imagen original para conocer sus características.
SaveArrow

Una vez hemos guardado copia de la imagen procedemos a revisar las propiedades de esta con el fin de obtener mas información sobre ella.

PropiedadesMenuArrow

Como se puede observar se trata de un GIF de 15 x 15 pixeles, con profundidad de 8 bits. El siguiente paso consiste en crear una imagen totalmente transparente para el menú estático, y modificar la flecha existente cambiando su color de negro a gris claro para los ítems dinámicos.

En este punto es necesario el uso de alguna herramienta de diseño grafico, en mi caso usare GIMP, que además de ser Open Source es sencillo de usar e instalar, ya que no dispongo de las horas necesarias para la instalación que requeriría otros productos.

Abrimos GIMP y creamos una nueva imagen, en la ventana de propiedades definimos las opciones de la siguiente forma:

CrearNuevaImagen
ImagenNueva

Una vez tenemos nuestra transparencia, la exportamos como GIF.

Transparencia
Exportar

Ahora solo resta cambiar el color de la flecha existente para que quede de color gris, para ello abrimos la imagen en GIMP, ampliamos la imagen para poder manejarla mejor, seleccionamos la herramienta de rellenado Relleno , seleccionamos el color blanco.
SelColor

Ahora, señalamos el área de color negro y voila… ya quedo… se ve gris gracias al ajuste de Umbral.

GrayArrow
Umbral

De esta forma ya tenemos listas nuestras imágenes, ahora procedemos a vincularlas a nuestro menú, tal como se ve a continuación:

   1: <asp:Menu ID="Menu" CssClass="menu" runat="server" DynamicHorizontalOffset="2" Orientation="Horizontal"
   2: StaticSubMenuIndent="10px" DynamicPopOutImageUrl="~/Images/MenuArrowGrey.gif"StaticPopOutImageUrl="~/Images/Trasparency.gif">
   3: <StaticSelectedStyle CssClass="staticSelectedStyle" />
   4: <StaticMenuItemStyle CssClass="staticMenuItemStyle" />

Para ello basta con asignar a las propiedades StaticPopOutImageUrl y DynamicPopOutImageUrl las rutas de las imágenes y ya tenemos el menú de acuerdo a los requisitos.

CustomMenu


Como se puede observar, los ítems estáticos ya no tienen la flecha, y los subitems la tienen de color gris, tal como requería.

El proceso es en realidad sencillo, la manipulación de las imágenes no representa mayor dificultad, y me permite alcanzar mis objetivos sin mayor dificultad.

Arquitectura Empresarial

Pues bien, como ya había mencionado en algún momento, tenía planeado tratar temas de alto nivel, tal como lo es la Arquitectura Empresarial.

Todo parte de un problema:

Debido a la diversificación de los mercados, la globalización, la masificación del uso de internet entre otras cosas, los modelos de negocio han cambiado mucho con respecto a lo que eran antiguamente, y con ello han surgido nuevas y muy variadas necesidades de negocio, lo que ha llevado a que en la actualidad los sistemas además de ser muy heterogéneos, deben funcionar de manera integrada para poder soportar los requerimientos de los negocios, sus clientes y socios, y de igual forma hace necesario el acceso rápido y fiable a la información para la toma de decisiones eficiente.

La velocidad a la que el mundo cambia hace que los modelos de negocio cambien y evolucionen a ritmos inimaginables, y prácticamente impredecibles, esto supone un gran problema para las áreas de TI, ya que estas áreas terminan siendo meramente reactivas a las necesidades del negocio, dando como consecuencia que todo se maneje, diseñe y decida con un alto nivel de informalidad, lo que significa que no existe un plano del negocio y menos aun de su relación con TI.

Esto se convierte en un gran problema, pues las empresas pierden la ventaja competitiva, ya que la falta de planeación hace cada vez más difícil que las plataformas y aplicaciones existentes evolucionen al ritmo que los negocios lo requieren.

La solución:

En este contexto se hace necesario establecer mecanismos que permitan coordinar las decisiones para obtener la ventaja competitiva antes mencionada.

Con la aparición de la empresa extendida, empresa virtual, y en general las nuevas formas organizativas que están surgiendo, entender la naturaleza y composición de las operaciones empresariales, que atraviesan los límites de la organización, se convierte en un prerrequisito para iniciar y mantener las relaciones de negocio. También se hace necesario el modelado de procesos de negocio para representar y entender las operaciones de la empresa.

La necesidad de la Integración Empresarial y los modelos de empresa surgen a partir de estas necesidades.

Es acá donde entra la AE (Arquitectura Empresarial). La AE, se basa en un modelo multidimensional de la organización y su relación con TI, que permita planear, estimar, simular, tomar decisiones, analizar, etc.

La AE identifica los componentes principales de la organización y la forma como estos interactúan para alcanzar los objetivos del negocio. Actúa como fuerza integradora entre aspectos de planificación del negocio, aspectos de operación de negocio, aspectos tecnológicos, etc.

Debido a la complejidad de una empresa, se hace difícil, por no decir imposible, su estudio bajo una única perspectiva, por lo que no hay una única arquitectura de empresa, sino que ésta se definirá en función de las arquitecturas que la componen.

Desde este punto de vista, la AE esta comprendida por las siguientes arquitecturas:

Arquitectura de Negocio

Arquitectura de Información

Arquitectura de Aplicaciones

Arquitectura de Infraestructura

Estas a su vez se relacionan entre si, de modo que a través de ellas existe una trazabilidad que nos permite ver la alineación existente entre el negocio y TI.

AE

Hasta este punto podemos concluir que debido a que TI juega un papel fundamental en la capacidad de competencia de las empresas, es necesario entender el negocio para poder construir y mantener una infraestructura de TI que lo soporte, de manera que el negocio y TI deben estar alineados en todo momento.

Posteriormente trataremos en detalle dichas vistas o arquitecturas y la forma como estas se relacionan.

miércoles, 4 de julio de 2012

Brindando seguridad a nuestras aplicaciones

Son muchas las ocasiones en que necesitamos implementar mecanismos de seguridad confiables en nuestras aplicaciones, sin que sean excesivamente complicadas o difíciles de desarrollar. En esta ocasión voy a implementar una solución basada en hash, usando para ello las utilidades de encripción aportada por el Framework de .NET

Este tipo de mecanismos ofrecen un buen nivel de seguridad a nuestras aplicaciones, ya que las hash son de tamaño fijo, y pueden representar una gran cantidad de datos. Sumado a ello cualquier cambio que se realice en los datos ocasionan grandes cambios imprevisibles en el valor hash

En esta guía utilizaremos el algoritmo SHA1, el cual es de 160 bits. Este mecanismo esta pensado como una solución para manejar las contraseñas de usuarios, pues se buscaba un mecanismo que garantizara que no hubiese forma de descifrar las contraseñas.

Así en lugar de almacenar una contraseña cifrada, se almacena la hash de dicha contraseña. Esto significa que la contraseña es irrecuperable, lo que garantiza un buen nivel de seguridad pues aun cuando la información sea sustraída no hay posibilidad alguna de recuperar las contraseñas.

Servicios de Criptografía

En .Net los servicios de criptografía están definidos en el namespace System.Security.Cryptography, el cual provee mecanismos de codificación y decodificación de datos, además de otras operaciones tales como hashing, generación números aleatorios, y mensajes de autenticación.

Manos a la obra

El siguiente es el método que obtiene la hash:

   1: public string GetSHA1(string data)
   2: {
   3:     SHA1CryptoServiceProvider Sha1 = new SHA1CryptoServiceProvider();
   4:     Byte[] buffer;
   5:  
   6:     //Convertimos la cadena en un arreglo0 de bytes
   7:     buffer = Encoding.ASCII.GetBytes(data);
   8:  
   9:     //Obtenemos la hash, y la codificamos en base 64 para evitar caracteres no soportados
  10:     return Convert.ToBase64String(Sha1.ComputeHash(buffer));
  11: }

Como se puede ver es bastante sencillo de implementar, si se desea elevar el nivel de seguridad se puede cifrar la contraseña antes de calcular la hash. En mi caso esta ultima ha sido la solución implementada.


Etiquetas de Technorati: ,,,

Cifrado con Triple DES


Triple DES es el algoritmo que hace triple cifrado del DES, también es conocido como TDES o 3DES, fue desarrollado por IBM en 1978.

Cuando se descubrió que una clave de 56 bits no era suficiente para evitar un ataque de fuerza bruta, TDES fue elegido como forma de agrandar el largo de la clave sin necesidad de cambiar de algoritmo de cifrado. Este método de cifrado es inmune al ataque por encuentro a medio camino, doblando la longitud efectiva de la clave (112 bits), pero en cambio es preciso triplicar el número de operaciones de cifrado, haciendo este método de cifrado muchísimo más seguro que el DES. Por tanto, la longitud de la clave usada será de 192 bits, aunque como se ha dicho su eficacia solo sea de 112 bits.

Servicios de Criptografía

En .Net los servicios de criptografía están definidos en el namespace System.Security.Cryptography, el cual provee mecanismos de codificación y decodificación de datos, además de otras operaciones tales como hashing, generación números aleatorios, y mensajes de autenticación.

Manos a la obra

Empecemos por el método de cifrado.

   1: public string Encryption(string data, string key)
   2: {
   3:     TripleDESCryptoServiceProvider TDes = new TripleDESCryptoServiceProvider();
   4:     MD5CryptoServiceProvider Hash = new MD5CryptoServiceProvider();
   5:  
   6:     Byte[] buffer;
   7:  
   8:     try
   9:     {
  10:         //Se convierte la cadena en un arreglo de bytes
  11:         buffer = Encoding.ASCII.GetBytes(data);
  12:  
  13:         //Definimos la llave de encripción, en este caso se me ocurrio incrementar la seguridad
  14:         //usando como llave  de encripción, la hash MD5 de la llave que se especificada en el metodo
  15:         TDes.Key = Hash.ComputeHash(Encoding.ASCII.GetBytes(key));
  16:  
  17:         //Se define el modo de cifrado que se desea utilizar
  18:         TDes.Mode= CipherMode.ECB;
  19:  
  20:         //Se crea el encriptor y se transforma el bloque de bits, se convierte a texto en base 64 para poderlo manejar
  21:         //ya que asi es mas viable el uso sobre con HTTP
  22:         return Convert.ToBase64String(TDes.CreateEncryptor().TransformFinalBlock (buffer,0,buffer.Length));
  23:     }
  24:     catch (Exception ex)
  25:     {
  26:         Console.WriteLine("Se genero un error al cifrar los datos! : {0}", ex.ToString());
  27:         throw ex;
  28:     }
  29: }

En este caso TDES maneja una llave mas larga razón por la cual se me ocurrió que en lugar de la llave que se recibe por parámetro, seria mejor utilizar el hash de la misma, de esta forma se hace aun mas robusto el mecanismo.


Es importante entender que existen diferentes métodos de cifrado, y que se debe usar el mismo tanto para el cifrado como para el descifrado del mensaje.


A continuación veremos el método para descifrar los datos que previamente hemos cifrado.


   1: public string Decryption(string data, string key)
   2: {
   3:     TripleDESCryptoServiceProvider TDes = new TripleDESCryptoServiceProvider();
   4:     MD5CryptoServiceProvider Hash = new MD5CryptoServiceProvider();
   5:  
   6:     Byte[] buffer;
   7:  
   8:     try
   9:     {
  10:         //Se convierte la cadena en un arreglo de bytes
  11:         buffer = Convert.FromBase64String(data);
  12:  
  13:         //Definimos la llave de encripción, en este caso se me ocurrio incrementar la seguridad
  14:         //usando como llave  de encripción, la hash MD5 de la llave que se especificada en el método
  15:         TDes.Key = Hash.ComputeHash(Encoding.ASCII.GetBytes(key));
  16:  
  17:         //Se define el modo de cifrado que se desea utilizar
  18:         TDes.Mode = CipherMode.ECB;
  19:  
  20:         //Se crea el desencriptor y se transforma el bloque de bits, se convierte a texto en base 64 para poderlo manejar
  21:         //ya que asi es mas viable el uso en ambientes de redes
  22:         return Encoding.ASCII.GetString(TDes.CreateDecryptor().TransformFinalBlock(buffer, 0, buffer.Length));
  23:     }
  24:     catch (Exception ex)
  25:     {
  26:         Console.WriteLine("Se genero un error al descifrar los datos! : {0}", ex.ToString());
  27:         throw ex;
  28:     }
  29: }

Como se puede ver, no es un proceso complicado, al contrario, es muy sencillo de implementar y nos permite gozar de un nivel de seguridad mas que adecuado para la mayoría de nuestras aplicaciones, si bien no es adecuada para ambientes donde la seguridad es el atributo de calidad dominante, si es una muy buena opción como mecanismo de seguridad en un entorno normal.


Etiquetas de Technorati: ,,,