Aplicar técnicas de encriptamiento con el fin de comprender su funcionamiento.



Documentos relacionados
Distinguir entre técnicas de cifrado Simétrico y Asimétrico

Realizar ejercicios de cifrado por medio de los cuales se comprenderá el funcionamiento e importancia del mismo.

CRIPTOGRAFÍA SIMÉTRICA Y ASIMÉTRICA

Práctica 5. Curso

Puedo estar tranquilo acerca de la información de mi empresa? Donde puedo poner mis archivos cuando viajo?

fundamentos Cifrar y descifrar datos

Julio César Mendoza T. Ingeniería de Sistemas Quito

Introducción. Algoritmos

Semana 13: Encriptación. Cifrado simétrico

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO. Introducción FACULTAD DE INGENIERÍA. Ordenación

Proceso de cifrado. La fortaleza de los algoritmos es que son públicos, es decir, se conocen todas las transformaciones que se aplican al documento

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Internet como herramientas de comunicación: El correo electrónico

Matemática de redes Representación binaria de datos Bits y bytes

UNIDADES DE ALMACENAMIENTO DE DATOS

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

Lección 12 Seguridad y criptografía. Universidad de Oviedo / Dpto. de Informática

Departamento CERES Área de Tarjetas Inteligentes Manual de Usuario

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Software Criptográfico FNMT-RCM

Encriptación en Redes

VÍDEO intypedia003es LECCIÓN 3: SISTEMAS DE CIFRA CON CLAVE PÚBLICA. AUTOR: Gonzalo Álvarez Marañón

Taller: Introducción a Windows Communication Foundation

Introducción a la Firma Electrónica en MIDAS

Sitios remotos. Configurar un Sitio Remoto

Como sabemos, en un Sistema de Comunicación de Datos, es de vital importancia

Pruebas de unidad con JUnit

Programación III. 1. Facultad: Ingeniería Escuela: Computación Asignatura:Programación III I. OBJETIVOS II. INTRODUCCIÓN TEÓRICA

Tema: Arreglos de Objetos en C++.

Preguntas y respuestas sobre el cifrado de la información personal. La guía para aprender a cifrar tu información

Sistemas de seguridad en redes inalámbricas: WEP, WAP y WAP2

Información sobre seguridad

Seguridad en la transmisión de Datos

Dra. Elsa Estévez Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Tema: Clases y Objetos en C++.

x

TRUECRYPT. TrueCrypt se distribuye gratuitamente y su código fuente está disponible, aunque bajo una licencia restrictiva.

Ayuda de Symantec pcanywhere Web Remote

Creación y administración de grupos de dominio

Método simétrico con cifrado por bloques desarrollado por Counterpane Labs y presentado al concurso del NIST que buscaba un sustituto para DES (el

Manual de software. Dynamic Cloud. 10/2014 MS-Dynamic_Cloud v1.2

Modulo 1 El lenguaje Java

MANUAL MS OUTLOOK EXPRESS

by Tim Tran:

Criptografía. Por. Daniel Vazart P.

Cómo creo las bandejas del Registro de Entrada /Salida y de Gestión de Expedientes?

Información sobre seguridad

MANUAL PARA LA GESTIÓN DEL PRÉSTAMO ENTRE LAS BIBLIOTECAS DE LA RED DE LECTURA PÚBLICA DE EUSKADI

Como crear una red privada virtual (VPN) en Windows XP

Servicio de Informática Vicerrectorado de Tecnologías de la Información y la Comunicación

Ayuda para la instalación Componente Firma Digital INDICE. 1 Configuración previa Configuración Internet Explorer para ActiveX...

LEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F)

ESCUELA POLITECNICA DEL EJERCITO

Ing. Cynthia Zúñiga Ramos

Manual Instalación de certificados digitales en Outlook 2000

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

MICQ. Trabajo Práctico Final Seminario de Ingeniería en Informática I Facultad de Ingeniería, UBA. Junio Cátedra: Pablo Cosso

Contraseñas seguras: Cómo crearlas y utilizarlas

Gran número de usuarios accediendo a un único servicio y con un único protocolo. Servidores y clientes con distintos protocolos.

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

WEB SERVICES. Manual técnico para desarrollador

Apéndice A Instalación de Visual Studio.NET

Edición de Ofertas Excel Manual de Usuario

Direcciones IP IMPLANTACIÓN DE SISTEMAS OPERATIVOS 1º ASIR. En redes IPv4.

Apuestas de lotería on-line mediante teléfonos móviles

Manual de Instalación del Certificado ACA en Windows 8.1

Manejo de versiones 392

POLÍTICA DE PRIVACIDAD PARA APLICACIONES MÓVILES GRUPOCOPESA. 1. información que se obtiene la aplicación y su utilización

Introducción a la programación orientada a objetos

Capítulo 6. Introducción a la POO

Configurar protección infantil en Windows XP

MANUAL BASICO DE WEBEX

FUNDAMENTOS DE INFORMÁTICA 1º Ingeniería Industrial

Redes de comunicaciones actuales permiten la conectividad de un gran número de usuarios. Explosión de servicios que necesitan la transmisión de datos

Guía de usuario para el acceso al recibo de nómina mediante la intranet de la Conselleria

forma de entrenar a la nuerona en su aprendizaje.

Crear una Nueva Solución Vacía:

TEMA 2: Representación de la Información en las computadoras

Para qué XP_CRYPT y SQL Shield?

Estructuras de Datos y Algoritmos Práctica I - Curso 2012/13

Manual del Protocolo XML-RPC de Mensajería Negocios

Métodos Encriptación. Tópicos en Sistemas de Computación Módulo de Seguridad

Para detalles y funcionalidades ver Manual para el Administrador

3.1. Guardar un libro de trabajo

Los elementos que usualmente componen la identidad digital son:

BREVE INTRODUCCIÓN A IPSEC

MANUAL DE AYUDA MODULO TALLAS Y COLORES

Internet Information Server

GENERACIÓN DE ANTICIPOS DE CRÉDITO

vbnmqwertyuiopasdfghjklzxcvbnmrty uiopasdfghjklzxcvbnmqwertyuiopasdf ghjklzxcvbnmqwertyuiopasdfghjklzxc

MANUAL DE USO DE LA APLICACIÓN ENCIFRA BOX 2.0

Gestió n de Certificadó Digital

Ministerio de Educación Nacional Dirección de Calidad

Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.

Etapa 3.1. Implementación de la clase Operacion

CRIPTOGRAFIA. Qué es, usos y beneficios de su utilización. Universidad Nacional del Comahue

Bases de la Firma Electrónica: Criptografía

Transport Layer Security (TLS) Acerca de TLS

QUIERES COMPROBAR CÓMO LAS REDES DETECTAN Y CORRIGEN ERRORES?

Transcripción:

Programación III, Guía 10 1 Facultad : Ingeniería Escuela : Computación Asignatura: Programación III Tema: ENCRIPTACIÓN. Objetivo Aplicar técnicas de encriptamiento con el fin de comprender su funcionamiento. Introducción Encriptación Simétrica con C#. Cuando dos partes remotas intercambian datos a través de un canal inseguro (como por ejemplo), ambas partes deben garantizar que los datos comunicados: No puedan ser comprendidos por nadie que pueda estar escuchando: Confidencialidad. No han sido modificados durante la trasmisión: Integridad. Provienen realmente de quién provienen y no de nadie que haya suplantado la identidad de una de las dos partes: Autenticación. La criptografía se utiliza para lograr estos objetivos. Para alcanzarlos es necesario la combinación de una serie de primitivas criptográficas. Aunque este tema da la sensación de ser complejo, en realidad, no es necesario saber cómo funcionan los algoritmos de encriptación. El truco es saber usarlos sin más y evitar malas prácticas. Consejo: Cualquier algoritmo que cambie de cierta manera un texto no se puede considerar un algoritmo encriptado, sino simplemente transformador (por ejemplo, aplicar un XOR a una cadena de texto produce un resultado que, como no lo entendemos, creemos que la información está encriptado, cuando en realidad un hacker podría obtener la información fácilmente). Así que, si vamos a proteger información, debe hacerse con algoritmos probados. 1ª Primitiva criptográfica: La encriptación simétrica o cifrado de clave secreta. En la encriptación simétrica se utiliza una única clave secreta para cifrar y descifrar los datos (de ahí la denominación de simétrica). Son algoritmos muy rápidos, por eso se utilizan para grandes secuencias de datos. Dentro de los algoritmos de encriptación simétrica podemos encontrar los siguientes (algunos más seguros que otros).

Programación III, Guía 10 2 DES (Digital Encryption Standard) 3DES (Three DES o Triple DES) IDEA (International Data Encryption Algorithm) AES (Advanced Encryption Standard) AES, también conocido como Rijndael (aunque no son exactamente lo mismo), es de amplia aceptación a nivel mundial. Hoy en día es el más seguro y rápido. Cualquiera de estos algoritmos utiliza los siguientes dos elementos (ninguno de los dos debe pasarse por alto ni subestimarse su importancia): IV (Vector de inicialización). No se puede encriptar sin él. Es de 16 bytes de longitud para el algoritmo de Rijndael. No es una 2ª llave, por lo tanto, no se trata de una dato que haya que esconder, únicamente hay que considerar que hay que usar el mismo IV para encriptar/desencriptar un mensaje concreto. Un error común es utilizar el mismo vector de inicialización en todas las encriptaciones. Utilizar siempre un mismo IV es equivalente en seguridad a no utilizar encriptación. Key (llave). Esta es la principal información para encriptar / desencriptar en los algoritmos simétricos. Toda la seguridad de un sistema simétrico depende de dónde esté esta llave, cómo esté compuesta y quién tiene acceso. Éste es un dato que debe conocerse única y exclusivamente por los interlocutores de la comunicación. De otra forma, la seguridad en la comunicación se vería comprometida. Ejemplo de funcionamiento. Ana y José acuerdan utilizar un algoritmo en particular con una clave y vector de inicialización concretos. Ana redacta un mensaje y cifra el texto usando la clave y el vector de inicialización y se lo envía a José por Internet. José recibe el texto cifrado y lo descifra utilizando la clave y el vector acordados anteriormente. Si se intercepta la transmisión, el interceptor no podrá recuperar el mensaje original porque no conoce la clave ni el vector. Consideraciones acerca de la clave. Cuanto más grande sea el tamaño de la llave, más difícil será obtenerla mediante un ataque por fuerza bruta. Para el algoritmo de Rijndael, las claves pueden ser de 128, 192 y 256 bits de longitud. Por ejemplo, para una clave de 64 bits de longitud, a un ritmo de comprobación de 50 claves por segundo, podría llevar unos 11,6 billones de años en comprobar todos los valores posibles de la clave.

Programación III, Guía 10 3 Consideraciones acerca del vector de inicialización. En un esquema de cifrado por bloques (como Rijndael), la secuencia de texto sin cifrar se parte en bloques para su procesamiento. Para una clave secreta determinada, un cifrado que no utilice un vector de inicialización codificará el mismo bloque de entrada de texto sin cifrar en el mismo bloque de salida de texto cifrado. Si hay bloques duplicados dentro la secuencia de texto a cifrar, habrá bloques duplicados en la secuencia de texto cifrado. Si el hacker sabe algo acerca de la estructura de un bloque del texto sin cifrar, puede utilizar esa información para descifrar el bloque de texto cifrado conocido y, posiblemente, recuperar la clave. Para combatir este problema, la información del bloque anterior se mezcla en el proceso de cifrado del bloque siguiente. Así pues, el resultado de dos bloques idénticos de texto sin cifrar es distinto. Como esta técnica utiliza el bloque anterior para cifrar el bloque siguiente, se utiliza un IV para cifrar el primer bloque de datos. Con este sistema, los encabezados de los mensajes comunes que un hacker podría conocer no pueden utilizarse para aplicar técnicas de ingeniería inversa en una clave. Consideraciones acerca del modo de cifrado Los algoritmos de cifrado de bloque como DES o AES separan el mensaje en bloques de tamaño fijo para su procesamiento, por ejemplo 128 bits. La forma en que se gestionan estos bloques se denomina modo de cifrado. Los modos de cifrado que soporta.net Framework son ECB, CBC, y CFB (es preferible usar CBC). Modos de relleno. La mayoría de los mensajes de texto a cifrar no contienen los bytes necesarios para rellenar totalmente los bloques. A menudo, no hay bytes suficientes para rellenar el último bloque. Cuando esto sucede, se agrega una cadena de relleno al texto. Por ejemplo, si la longitud del bloque es de 64 bits y el último bloque sólo contiene 40 bits, se agregan 24 bits de relleno..net Framework soporta dos modos de relleno: Zeros: La cadena de relleno consta de bytes establecidos en cero. PKCS7: La cadena de relleno PKCS #7 consta de una secuencia de bytes, en la que cada byte es igual al número total de bytes de relleno agregados. Materiales y equipo Guía de Laboratorio Nº 10. Computadora con programa: o Visual Studio 2005. C# Dispositivo de Almacenamiento (USB).

Programación III, Guía 10 4 Procedimiento Ejemplo 1: Cree un proyecto modo consola en C#.NET. Con el nombre de encryption. using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Security.Cryptography; namespace encryption class Program static string encriptar(string cadena, string clave) // Aqui va el codigo de la funcion encriptar // Convierto la cadena y la clave en arreglos de bytes // para poder usarlas en las funciones de encriptacion byte[] cadenabytes = Encoding.UTF8.GetBytes(cadena); byte[] clavebytes = Encoding.UTF8.GetBytes(clave); // Creo un objeto de la clase Rijndael RijndaelManaged rij = new RijndaelManaged(); // Configuro para que utilice el modo ECB rij.mode = CipherMode.ECB; // Configuro para que use encriptacion de 256 bits. rij.blocksize = 256; // Declaro que si necesitara mas bytes agregue ceros. rij.padding = PaddingMode.Zeros; // Declaro un encriptador que use mi clave secreta y un vector // de inicializacion aleatorio ICryptoTransform encriptador; encriptador = rij.createencryptor(clavebytes, rij.iv); // Declaro un stream de memoria para que guarde los datos // encriptados a medida que se van calculando MemoryStream memstream = new MemoryStream(); // Declaro un stream de cifrado para que pueda escribir aqui // la cadena a encriptar. Esta clase utiliza el encriptador // y el stream de memoria para realizar la encriptacion // y para almacenarla CryptoStream cifradostream; cifradostream = new CryptoStream(memStream, encriptador, CryptoStreamMode.Write); // Escribo los bytes a encriptar. A medida que se va escribiendo // se va encriptando la cadena cifradostream.write(cadenabytes, 0, cadenabytes.length);

Programación III, Guía 10 5 // Aviso que la encriptación se terminó cifradostream.flushfinalblock(); array. // Convert our encrypted data from a memory stream into a byte byte[] ciphertextbytes = memstream.toarray(); // Cierro los dos streams creados memstream.close(); cifradostream.close(); // Convierto el resultado en base 64 para que sea legible // y devuelvo el resultado return Convert.ToBase64String(cipherTextBytes); static string desencriptar(string cadena, string clave) // Aqui va el codigo de la funcion desencriptar // Convierto la cadena y la clave en arreglos de bytes // para poder usarlas en las funciones de encriptacion // En este caso la cadena la convierta usando base 64 // que es la codificacion usada en el metodo encriptar byte[] cadenabytes = Convert.FromBase64String(cadena); byte[] clavebytes = Encoding.UTF8.GetBytes(clave); // Creo un objeto de la clase Rijndael RijndaelManaged rij = new RijndaelManaged(); // Configuro para que utilice el modo ECB rij.mode = CipherMode.ECB; // Configuro para que use encriptacion de 256 bits. rij.blocksize = 256; // Declaro que si necesitara mas bytes agregue ceros. rij.padding = PaddingMode.Zeros; vector // Declaro un desencriptador que use mi clave secreta y un // de inicializacion aleatorio ICryptoTransform desencriptador; desencriptador = rij.createdecryptor(clavebytes, rij.iv); // Declaro un stream de memoria para que guarde los datos // encriptados MemoryStream memstream = new MemoryStream(cadenaBytes); // Declaro un stream de cifrado para que pueda leer de aqui // la cadena a desencriptar. Esta clase utiliza el desencriptador // y el stream de memoria para realizar la desencriptacion CryptoStream cifradostream; cifradostream = new CryptoStream(memStream, desencriptador, CryptoStreamMode.Read);

Programación III, Guía 10 6 // Declaro un lector para que lea desde el stream de cifrado. // A medida que vaya leyendo se ira desencriptando. StreamReader lectorstream = new StreamReader(cifradoStream); // Leo todos los bytes y lo almaceno en una cadena string resultado = lectorstream.readtoend(); // Cierro los dos streams creados memstream.close(); cifradostream.close(); // Devuelvo la cadena return resultado; static void Main(string[] args) // La clave tiene que tener 32 caracteres para // la encriptacion de 256 bits. string clave_secreta = "clave_de_32_caracteres_obligado."; string valorencriptado = encriptar("hola", clave_secreta); string valordesencriptado = desencriptar(valorencriptado, clave_secreta); Console.WriteLine(valorEncriptado); Console.WriteLine(valorDesencriptado); Console.ReadLine(); Ejemplo 2. Cree un proyecto modo consola en C#.NET. Con el nombre de miejemplo. using System; using System.IO; using System.Security.Cryptography; using System.Collections.Generic; using System.Text; namespace miejemplo class Program static void Main(string[] args) // Este es el mensaje que vamos a encriptar. string mensaje = "Programando seguridad en C#.NET"; Console.WriteLine("Esto es el mensaje sin cifrar: " + mensaje); Console.WriteLine("Pulse una tecla para continuar \n");

Programación III, Guía 10 7 // Creamos el algoritmo encriptador SymmetricAlgorithm algoritmo = SymmetricAlgorithm.Create("Rijndael"); //Se podría haber creado el algoritmo de esta otra manera: //RijndaelManaged algoritmoencriptador = new RijndaelManaged(); ConfigurarAlgoritmo(algoritmo); GenerarClave(algoritmo); GenerarIV(algoritmo); byte[] mensajeencriptado = Encriptar(mensaje, algoritmo); Console.WriteLine("Esto es el mensaje cifrado:"); foreach (byte b in mensajeencriptado) Console.Write("0:X2 ", b); Console.WriteLine("\nPulse una tecla para continuar \n"); byte[] mensajedesencriptado = Desencriptar(mensajeEncriptado, algoritmo); string mensajedescrifrado = Encoding.UTF8.GetString(mensajeDesencriptado); Console.WriteLine("Esto es el mensaje descifrado: " + mensajedescrifrado); Console.WriteLine("Pulse una tecla para terminar \n"); algoritmo.clear(); private static void ConfigurarAlgoritmo(SymmetricAlgorithm algoritmo) // Cambiamos el valor del tamaño de bloque algoritmo.blocksize = 128; // Establecemos el modo de cifrado y con el modo de relleno algoritmo.mode = CipherMode.CBC; algoritmo.padding = PaddingMode.PKCS7; Console.WriteLine("Longitud de bloque: 0", algoritmo.blocksize); Console.WriteLine("Modo de cifrado: 0", algoritmo.mode); Console.WriteLine("Modo de relleno: 0", algoritmo.padding); Console.WriteLine("Pulse una tecla para continuar \n"); private static void GenerarClave(SymmetricAlgorithm algoritmo) // Establecemos la longitud que queremos que tenga la clave a generar. algoritmo.keysize = 256; Console.WriteLine("Longitud de la clave: 0", algoritmo.keysize); Console.WriteLine("Pulse una tecla para continuar \n"); // Leer sin más el valor de la clave hara que se genere. // sacamos la clave por consola Console.WriteLine("La clave: ");

Programación III, Guía 10 8 foreach (byte b in algoritmo.key) Console.Write("0:X2 ", b); Console.WriteLine("\nPulse una tecla para continuar \n"); // Podemos generar otra nueva algoritmo.generatekey(); // sacamos la nueva clave por consola Console.WriteLine("Otra clave: "); foreach (byte b in algoritmo.key) Console.Write("0:X2 ", b); Console.WriteLine("\nPulse una tecla para continuar \n"); // Otra forma de crear claves sería con RNG (Random Number Generator) RandomNumberGenerator randomnumbergenerator = RandomNumberGenerator.Create(); // Se rellena el array de bytes de la clave con datos aleatorios randomnumbergenerator.getbytes(algoritmo.key); // sacamos la clave por consola Console.WriteLine("Otra forma de obtener una clave: "); foreach (byte b in algoritmo.key) Console.Write("0:X2 ", b); Console.WriteLine("\nPulse una tecla para continuar \n"); private static void GenerarIV(SymmetricAlgorithm algoritmo) // Si haces lo siguiente se genera un nuevo IV algoritmo.generateiv(); // sacamos el IV por consola Console.WriteLine("IV (Vector de inicialización): "); foreach (byte b in algoritmo.iv) Console.Write("0:X2 ", b); Console.WriteLine("\nPulse una tecla para continuar \n");

Programación III, Guía 10 9 public static byte[] Encriptar(string mensajesinencriptar, SymmetricAlgorithm algoritmo) // La clase SymmetricAlgorithm delega el proceso de encriptación de datos // a la interfaz ICryptoTransform, la cual expone los detalles en el manejo de bloques. // Una instancia de ICryptoTransform transforma texto plano en texto cifrado o vice versa. // Las siguiente sentencia demuestra como crear transformaciones usando CreateEncryptor. // Crear una ICryptoTransform que puede ser usada para encriptar datos ICryptoTransform encriptador = algoritmo.createencryptor(); // Las instancias de la interfaz ICryptoTransform no son útiles en si mismas. //.NET framework provee la clase CryptoStream para el manejo de instancias de la interfaz ICryptoTransform. // La clase CryptoStream actua como un envoltorio sobre un stream y transforma // automáticamente bloques de datos usando una interfaz ICryptoTransform. // La clase CryptoStream transforma datos leídos de un stream // (por ejemplo, desencriptando texto cifrado de un fichero) // o escribiendo en un stream (por ejemplo, encriptando datos generados por programa // y almacenando el resultado en un fichero). // Crear instancias de la clase CryptoStream requiere un stream real, // una instancia de la interfaz ICryptoTransform // y un valor de la enumeracion CryptoStreamMode // Obtenemos los bytes que representan el mensaje a encriptar byte[] textoplano = Encoding.Default.GetBytes(mensajeSinEncriptar); // Creamos un MemoryStream MemoryStream memorystream = new MemoryStream(); // Cualquier operación de encriptación/desencriptación hara que la clase // que implemente el algoritmo simétrico genere una nueva clave e IV // si dichos valores no han sido establecidos // Creamos el CryptoStream CryptoStream cryptostream = new CryptoStream(memoryStream, encriptador, CryptoStreamMode.Write); // Escribimos el textoplano hacia el CryptoStream cryptostream.write(textoplano, 0, textoplano.length); // Terminamos la operación de encriptación. cryptostream.flushfinalblock(); // Liberamos. memorystream.close(); cryptostream.close(); // Obtenemos el texto cifrado del MemoryStream return memorystream.toarray();

Programación III, Guía 10 10 public static byte[] Desencriptar(byte[] mensajeencriptado, SymmetricAlgorithm algoritmo) int numerobytesdesencriptados = 0; // La clase SymmetricAlgorithm delega el proceso de desencriptación de datos // Una instancia de ICryptoTransform transforma texto plano en texto cifrado o vice versa. // Las siguiente sentencia demuestra como crear transformaciones usando CreateDecryptor. byte[] mensajedesencriptado = new byte[mensajeencriptado.length]; // Crear una ICryptoTransform que puede ser usada para desencriptar datos ICryptoTransform desencriptador = algoritmo.createdecryptor(); // Procedemos a descifrar el mensaje MemoryStream memorystream = new MemoryStream(mensajeEncriptado); // Creamos el CryptoStream CryptoStream cryptostream = new CryptoStream(memoryStream, desencriptador, CryptoStreamMode.Read); // Decrypting data and get the count of plain text bytes. numerobytesdesencriptados = cryptostream.read(mensajedesencriptado, 0, mensajedesencriptado.length); // Liberamos recursos. memorystream.close(); cryptostream.close(); return mensajedesencriptado;

Programación III, Guía 10 11 Análisis de resultados En base a los programas dados en la práctica, modifíquelo de manera que el mensaje a cifrar pueda ser ingresado por el usuario (de forma manual) Ahora que los mensajes pueden ser ingresados por el usuario, compare introduciendo mensajes de diferente longitudes. Cambia la longitud del mensaje cifrado? Por qué tiene esa longitud? Consideran qué es seguro? Para el ejercicio 2, cuando se ejecuta manda tres mensajes de Clave, otra clave y otra manera de obtener la clave Qué representan dichas claves? Investigación complementaria. Investigue cómo funciona el modo de cifrado CBC, qué es utilizado en esta guía, además como tiene relación con el modo de relleno PKCS7. Presente un caso de aplicación real en el cual se haya utilizado este tipo de cifrado. Referencia. http://elburgues.wordpress.com/2010/03/13/encriptacionsimetrica-en-c/ http://copstone.com/2010/03/encriptacion-en-c-sharp/

Programación III, Guía 10 12 Guía 10: Encriptación. Hoja de cotejo: 10 1 Alumno: Máquina No: Docente: GL: Fecha: EVALUACION % 1-4 5-7 8-10 Nota CONOCIMIENTO 40 APLICACIÓN DEL CONOCIMIENTO 40 ACTITUD 20 TOTAL 100%