UNIVERSIDAD AUTONOMA METROPOLITANA UNIDAD IZTAPALAPA REYES CHAVERO JAVIER AGUSTIN. 92221615. INGENIERIA ELETRONICA. AREA DE CONCENTRACION : COMUNICACIONES. DMSION DE CIENCIAS BASICAS E INGENIERIA La realización del presente proyecto no pudo haberse llevado a cabo sin el valioso asesoramiento del profesor : M. en I. NORBERT0 RAMlREi MANDUJANO ASESOR. MER AGUSTIN. 92221615 ALUMNO. I INDICE. PAGINA Introducción 3 Objetivos 5 Consideraciones teoncas 6 Transmision de datos con portadoras analogicas 10 Modulacion digital FSK 11 Fundamentos de encriptación 15 Fundamentos de compresion 18 Desarrollo y construcción 21 Software de Transmisión 30 Software de Recepción 36 Método de encriptamiento 42 Método de compresión 51 Conclusiones 66 Bibliografía 67 PROYECTO TERMINAL COMUNICACI~NINALÁMBRICA DE DATOS ENCRIPTADOSY COMPRIMIDOS ENTRE DOS pcvS El constante desarrollo en los equipos de cómputo, obliga a que la mayoría de los campos de estudio tengan una aplicación relacionada con el uso de una PC, ya sea para simulación de experimentos; adquisición, almacenamiento y procesamiento de datos; desarrollo de problemas matemáticos con una mayor velocidad; diseño de proyectos; o simplemente para el uso de procesadores de texto. Sin embargo, el campo que con mayor frecuencia utiliza los recursos de un equipo de cómputo es el de la electrónica, ya que usualmente se realizan tareas como simulaciones computacionales de circuitos eléctricos; diseño de sistemas; etc. Dentro del área de la electrónica, uno de los usos más recientes que se le da a los equipos de cómputo es el de las telecomunicaciones, es decir, la Comunicación (intercambio de datos) entre dos o más PC's con lo cual se generan grandes ventajas para el procesamiento de datos como puede ser el intercambio de información, mediciones a distancia, control a distancia, y transferencia de archivos por citar solo algunas. La comunicación entre equipos de cómputo ha sido de gran utilidad para el desarrollo de redes computacionales, ya que utilizando el principio básico de conexión entre dos equipos, puede ampliarse el intercambio de datos a más equipos, esto claro con ayuda de algún paquete (software) y la inclusión de circuitos (hardware) necesarios para el control de dicha comunicación. A lo largo del desarrollo de las computadoras, la transmisión de datos Ó información entre dos terminales ha sido más basta cada día. Así, como el almacenamiento y recuperación de información por lo que se ha requerido de nuevos métodos para dar soporte a los sistemas de comunicación. En primera instancia, la solución estaría en aumentar las líneas de transmisión y dispositivos auxiliares, como son modems y multiplexores. Sin embargo, tomando en cuenta las grandes inversiones que tendrían que hacer las empresas, esta solución no sería la más adecuada. El método más conveniente para solucionar el problema de almacenamiento de datos y transferencia de información, es inventar un código eficiente para la representación de los datos. Dos técnicas que generalmente se aplican para dicha solución son: la compresión fisica y la compresión lógica. Los beneficios que se consiguen con la compresión de datos son, la reducción de tiempo de transmisión de datos, la reducción de los requerimientos de almacenamiento de información y, l a reducción del tiempo de ejecución de los programas. PROYECTO TERMINAL COh4UNlCACION INALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC’s Otro punto que tocaremos en el proyecto es, la encriptación de información ya que en algunos sistemas de comunicación se requiere transmitir información secreta. Entonces el transmisor debe de asegurarse de que ningún intermediario pueda afectar el mensaje por cualquier medio: específicamente el receptor o intermediario no puede interceptar y leer el mensaje, interceptar y modificar el mensaje ó fabricar un mensaje substituto. Es por eso que se ha desarrollado la criptografia, que es el arte y la ciencia de guardar mensajes seguros. A OBJETIVOS Aplicar los conocimientos adquiridos a lo largo de la carrera, tanto teórica como experimentalmente. Implementar un sistema de comunicación inalámbrica entre dos PC ’s, utilizando un modulador de FM, siendo el medio de transmisión el aire. Se persigue también el enviar y recibir los datos encriptados y comprimidos de una PC a otra. El hardware que se utilizará para el desarrollo del proyecto, será con circuitos integrados comerciales y dispositivos discretos como: resistencias, capacitores, transistores etc. Esto con el propósito como ya antes se dijo, es para aplicar los conocimientos adquiridos. Se realizará el software corespondiente, para el envío y recepción y almacenamiento de datos, así como el correspondiente a la encriptación y compresión de éstos. CONSIDERACIONESTEÓRICAS EL PROTOCOLO DE C O M U N I C A C I ~ N RS-232 Toda computadora necesita de una serie de procedimientos formales por medio de los cuales tanto el hardware como el software estén capacitados para comunicarse con el resto del mundo. Los procedimientos de más bajo nivel generalmente describen las interfaces de hardware (conectores), interfaces eléctricas (niveles de voltaje o corriente), interfaces de tiempo e interfaces de señal. Al conjunto de procedimientos de bajo nivel se le llama protocolo de comunicación El protocolo de comunicación más común es el protocolo serial RS-232, en el cual, los datos son transmitidos en secuencia, es decir, un bit seguido de otro sobre un solo alambre, con una tierra de retorno. El estándar RS-232 fue desarrollado por la Asociación de Industrias de Electrónica (EIA) en los principios de la era de la computación en Agosto de 1969. El nombre completo del estándar es "Estándar Recomendado 232, Interface Entre Equipos Terminales de Datos (DTE) y Equipos de Comunicación de Datos (DCE) Usando Interface Serial". El Estándar EIA interconecta el Equipo Terminal de Datos (DTE), típicamente una terminal o una computadora, el Equipo de Comunicación de Datos (DCE), típicamente un modem. El puerto serial en la mayoria de las computadoras y en la mayoría de los dispositivos de comunicaciones usa solo entre 9 y 11 pines, los cuales son suficientes para la mayoría de las aplicaciones de control, además de que es suficiente para operar un modem. La mayoría de los modems, impresoras, controladores y otros dispositivos en el mercado de la comunicación de datos siguen los procedimientos del estándar RS-232. Existe además un equivalente europeo, conocido como la recomendación V.24 de CCITT, la cual no solo describe la interface eléctica, sino también especifica muchos más de las funciones que contiene el estándar EIA. Las asignaciones de los pines para el conector DB-9 como se usan por muchos fabricantes cumpliendo con las designaciones de el estándar RS-232 se listan a continuación: PROYECTO TERMINAL COMUNICACIÓN INALÁMBRICA DE DATOS ENCRiPTpLDOS Y COMPRIMIDOS ENTRE DOS PC’c 1 2 3 4 5 6 7 8 9 Diagrama de pines del RS-232 DB-9 4breviatura I Num. 4TD 3TR SG 13 4 5 ~~~~~ Descripción Tipo de Señal Detector de Control Señal Recibida en la Línea Función Direcció n Hacia Es un manejador de la DTE terminal local que indica que una señal aceptable está siendo recibida en la línea de comunicaciones entre DCE’s Información recibida en DTE la terminal local Información enviada DCE desde la terminal local Manejador de la terminal DCE que prepara al DCE para la comunicación La conexión de tierra a la que otras señales del RS-232 son referenciadas - Datos Dato Recibido Dato Datos Transmitido Terminal de Control Datos Lista Tierra Señal de Tierra 7 - PROYECTO TERMINAL COMUNICACIÓN INALÁMBRICA DE DATOS ENCRíPTADOS Y COMeRIMIDOS ENTRE DOS PC's Abreviatura Num. DSR RTS CTS E u 9 I Descripción Tipo de Función Señal Set de Datos Control Señal de control para la Listo terminal local que indica que el equipo de comunicación de datos está conectado y listo para trabajar Control Señal de control de la Envío terminal local para determinar si un dato puede ser enviado Control Señal de control para la terminal local que indica que puede comenzar la transmisión de datos de la terminal remota Indicador de Control Manejador enviado a la Tono terminal local que indica que una señal está siendo recibida en la línea de comunicación. Direcció n Hacia DTE DCE DTE DTE PROYECTO TERMINAL C O m C A C I O N INALÁMBRICA DE DATOS ENCRIPTADOS Y COMPIChlTDOS ENTRE DOS PC's El estándar RS-232 cubre principalmente las características eléctricas de las señales de datos. Las señales de datos recibidos, de acuerdo con la norma, se interpretan como sigue: - Niveles de voltaje entre -3 y -15V es un '1' lógico. Niveles de voltaje de +3 a +15V es un 'O' lógico. Niveles entre -3 y +3V no están definidos. Igualmente, voltajes negativos en comandos de control indican la condición de negación y voltajes positivos indican la condición de afirmación. * * A continuación se presentan las especificaciones de la interface serial RS-232. 0 o Máxima distancia recomendada 15m. 2Okbauds Máxima velocidad de señalización o Niveles de voltaje Circuito abierto <25V Afirmación, 'O' +5 a + 15V Negación, '1' -5 a - 15V 0 Máximos niveles de voltaje en el receptor *3 a*25V 9 PROYECTO TERMINAL COMUNICACI~NINALÁMBRICA DE DATOS ENCRIPTADOSY COMPRIMIDOS ENTRE DOS PC’S TRANSMISI~NDE DATOS CON PORTADORAS ANAL~GICAS La transmisión de datos encierra el transmitir información digital desde un DTE hacia otro. En vez de construir líneas especiales para este propósito, es más conveniente usar la red telefónica pública. Desafortunadamente, dicha red fue construida mucho antes del advenimiento de las comunicaciones de datos a gran escala, además de que fue diseñada para transportar información que fuera analógica en su naturaleza. En suma, la información analógica está restringida al rango de frecuencias de 300 a 3200Hz. Por esto la función primaria de un modem en un extremo de la línea de transmisión es la de convertir pulsos digitales a señales analógicas capaces de ser transmitidas sobre la red telefónica, y otro modem en el otro extremo se encargará entonces de reconvertir las señales analógicas en lo pulsos digitales originales. Los modems se clasifican en categorías dependiendo si son síncronos o asíncronos. Si un procedimiento de comunicación de datos utiliza modems síncronos, los relojes internos tanto del modem transmisor como del modem receptor deberán ser sincronizados. Estos relojes son usados para controlar la velocidad a la cual los datos son transmitidos. El tipo de modulación usado con modems síncronos es tal que el receptor extrae información de sincronía de la señal recibida y la usa para mantener la sincronización con el modem transmisor. Además, la sincronización con la frecuencia portadora entre transmisor y receptor debe ser establecida y mantenida con el propósito de demodular correctamente la señal en el extremo de recepción. En cambio, los modems asíncronos no se sujetan a estas restricciones, ya que la información de sincronía no es transmitida entre ellos. Una señal digital transmitida sobre un canal telefónico contiene significantes componentes de energía que varían entre un nivel de DC y alrededor de tres veces la velocidad de señalización. Por ejemplo, para una velocidad de señalización de 600 Bauds, la energía de la señal variará entonces entre O y 1800Hz. La mayoría de la energía de la señal estaría concentrada a bajas frecuencias por debajo de la velocidad de señalización, o por debajo de 600Hz. La red telefónica analógica, sobre la cual se transmiten las señales digitales, desafortunadamente no permite el paso de fiecuencias menores a 300Hz, ni mayores a 3200Hz. . ' * PROYECTOTEWAL COh4UNICACIÓN INALhlBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC's En la siguiente figura se realiza una comparación entre la distribución de energía de una señal digital y la banda de paso de la red telefónica. AMPLITUD I nri CANAL DEVOZ SE&U DE DATOS DEPRECüENCIAf 1 f' 2f 3f FRECUENCIA ESPECTRO ESPECTRO DE ENERGIA DE UNA SEÑAL vs. ANCHO DEBANDA DEL CANAL TELEFONICO Con el propósito de acoplar la señal digital que se encuentra en la banda de O a 1800Hz (a una velocidad de 1200 bps) dentro de la banda de paso de la red telefónica (300 a 3200Hz), la señal se modula con fiecuencias portadoras localizadas dentro la banda de paso, logrando así, la transmisión. El valor instantáneo de la fiecuencia portadora Y puede ser representada a un tiempo dado t por medio de una señal senoidal con tres parámetros, la amplitud máxima A, la fiecuencia F, y la fase P: Y = A-sen(2nFt + P) En consecuencia, si la señal portadora llevará información digital, los tres parámetros, amplitud, fiecuencia, y fase, serán modulados ya sea separadamente o conjuntamente por la señal digital. Los modems pueden operar en transmisión bidireccional alternada (semiduplex), o simultánea (full duplex). PROYECTO TERMINAL COMUNICACIÓN INALÁh4BRlCA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC’c Las técnicas de señalización utilizan los siguientes métodos: o Modulación en amplitud (ASK: Amplitude Shift Keying). En esta técnica se varía solamente la amplitud de la señal analógica. Tiene ciertas desventajas, siendo la principal una baja inmunidad al ruido; consecuentemente casi no se usa en la práctica. 0 Modulación en frecuencia (FSK: Frecuency Shift Keying). Aquí la característica que varía es la Cecuencia de la portadora y es usada para transmisiones a baja velocidad. Los modems FSK generalmente son asíncronos y pueden operar a una velocidad máxima de transmisión de 1800bps. o Modulación en fase (PSK: Phase Shift Keying). En este caso se modifica la fase de la señal analógica. Esta técnica puede ser usada a velocidades arriba de 4800bps, además de que generalmente la transmisión es síncrona. o Modulación combinada en fase y amplitud (QASK: Quadrature/Amplitude Shift Keying). Varían tanto la fase como la amplitud de la portadora y se usa para velocidades mayores a 9600bps. PROYECTO TERMINAL COMUMCACIÓN INALÁMBRICA DE DATOS ENCFUPTADOS Y COMPRIMIDOS ENTRE DOS PC's LA MODULACIÓN DIGITAL FSK FSK es una técnica relativamente simple de modulación en la cual, la señal analógica es modulada por una serie de pulsos digitales ('O' lógicos y '1' lógicos) que varían entre dos niveles discretos de voltaje. La salida de una modulador FSK puede ser considerada una función escalón en el dominio de la frecuencia. La figura muestra una gráfica de una simulación de una señal FSK. t I T I I 1 'I'LOGICO FRECUENCIA ALTA I 'O'LOGICO I 1 I FRECUENCIA BAJA SEÑAL FSK Una cantidad importante en la modulación FSK es el llamado factor h, el cual expresa el grado de modulación en este proceso. El factor h se define como sigue: I fm - fs I h= V Donde: fm = frecuencia de un '1' fs = frecuencia de un 'O' v = velocidad de entrada de datos (bps) PROYECTO TERMINAL COMUNICACIÓN INALÁh4BRICA DE DATOS ENCRIPTADOS Y COMPRIMZDOS ENTRE DOS PC’s Como una regla general para mejorar el desempeño en FSK, el factor h esta limitado a valores menores que 1. La circuitería necesaria para realizar una modulación y demodulación FSK es relativamente simple debido a los estándares de la actualidad, lo que hace que este tipo de modems sea muy barato. El modulador requiere solamente de un switch electrónico para seleccionar una de las dos frecuencias para el modo ya sea de generación o detección. El demodulador requiere un laso amarrador de fase (PLL: Phase Locked Loop) o filtros pasabanda, seguidos de un detector, para determinar que frecuencia es la que está recibiendo. Para este tipo de modulación, no es necesario ningún tipo de sincronía entre el transmisor y el receptor. MODULACI~NEN FRECUENCIA (FM) En modulación lineal (como ejemplo Modulación en Amplitud AM), se varía la amplitud de una señal portadora, en modulación angular la amplitud es constante, las variaciones se reflejan en la frecuencia de la portadora. En este tipo de modulación, las componentes espectrales de la forma de onda modulada dependen de la amplitud y frecuencia de la señal de banda base. En general, la señal modulada angularmente se representa de la siguiente manera: XC = AC cos(oct + Q(t)) Para este caso, se tiene un ángulo total instantáneo por lo que resulta: xc = AC cos(0c(t)) = xc = AC Re[J ex(f)] Si ec(t) contiene la información x(t), se tiene entonces el proceso denominado modulación angular o modulación exponencial. La frecuencia instantánea f(t) de la señal modulada esta dada por: PROYECTO TERMINAL COh4UNlCACIÓN I N A L h R I C A DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC's donde: fA es la desviación de frecuencia, es decir, el máximo corrimiento de f(t) con respecto a la frecuencia de la señal portadora fc(t). Para una señal FM, el ángulo total instantáneo queda de la siguiente manera: integrando: $(t) = 2x fA x(h) dh + @(to) resulta: Si to se toma tal que: $(to) = O $(t) = 2x fA x(h) dh Entonces, la forma de onda de la señal modulada en frecuencia queda: xc = AC cos[oct + 2 ~fA : ~ ( hdh] ) Debido a que en FM la amplitud de la onda resultante es constante, la potencia promedio transmitid resulta de la siguiente forma: 3 ST=(Ac) /2 Partiendo del hecho que FM es un tipo de modulación exponencial, lo cual es un proceso no lineal, la onda modulada no tiene similitud evidente al mensaje transmitido. FUNDAMENTOS DE ENCRIPTACION Un mensaje es llamado plaintext o cleartext. El proceso para disfrazar un mensaje de este tipo es llamado encriptamiento. Un mensaje encriptado es llamado ciphertext. El proceso para regresar el ciphertext a su forma de plaintext es llamado desencriptamiento. Plaintext Ciphertext I I 1 Desencriptación riginal plaintext I b - ‘ 3 PROYECTOTERMINAL CUMUNICACI~NINALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOSENTRE DOS P C ’ ~ El arte y la ciencia de guardar mensajes seguros es llamado criptografía y es realizado por los criptografos. Los criptoanalistas son los profesionales del criptoanálisis, que es el arte y la ciencia de romper un ciphertext ; por ejemplo, observando a través del disfiaz. La rama de las matemáticas que integra tanto a la criptografía como el criptoanálisis es llamado criptología y los profesionales de dicha rama son llamados criptologistas. Actualmente casi todos los criptologistas son también matemáticos teóricos. El plaintext es denotado por la letra P. Pude ser una cascada de bits, un archivo de texto, una cascada de voz digitalizada o imagen de video digital. Hasta donde a la computadora le interesa, P es simplemente datos binarios. El plaintext puede ser manipulado para transmisión o almacenamiento. En cualquier caso, P es el mensaje a encriptar. El cipehertext es denotado por C. Este también consiste de datos binarios; algunas veces del mismo tamaño que P, algunas veces más grande (por combinación de la compresión y encriptamiento, C puede ser más pequeño que P. De cualquier modo, el encriptamiento por sí solo no cumple con esto). La función de encriptamiento E opera sobre P para producir C. O, en notación matemática: E(P) = C En el proceso inverso , la función de desencriptamiento D opera sobre C para producir P: D(C) = P El proceso total de encriptamiento y desencriptamiento de un mensaje nos lleva a recuperar el plaintext original, lo cual queda representado en la siguiente identidad (la cual es necesariamente verdadera). ALGORITMOS Y CIFRADOS Un algoritmo de criptografía, también llamado un cipher Ó cifrado, es la función matemática usada para encriptamiento y desencriptamiento. Para encriptar un mensaje plaintext, se aplica un algoritmo de encriptamiento para el plaintext. Para desencriptar un mensaje ciphertext, se aplica un algoritmo de desencriptación para el ciphertext. La seguridad de un algoritmo es basado en mantener en secreto la naturaleza del algoritmo, esto es llamado restringido o prohibido. Para una verdadera seguridad, todo algoritmo moderno de encriptación usa una llave, denotada por K.Esta llave puede tener de uno a varios valores (de preferencia un número largo es mejor). El rango de posibles valores de las llaves es llamado el keyspace. PROYECTO TERMINAL COMUNICACIÓN INALÁh4BRICA DE DATOS ENCFUPTADOS Y COMPRiMiDOS ENTRE DOS PC’s El keyspace indica el número total de claves posibles. Por ejemplo, un cifrado que acepta 160 bits para sus claves, su keyspace es de 2I6O, o aproximadamente 1.46 X lo4*. Aunque recomendamos que cambien los largos de las claves para aumentar el poder de procesamiento, generalmente el largo de las claves de seguridad para encriptado es de 128 bits; con algoritmos más elaborados se usan claves en donde este tamaño se reduce. Si no existe otro camino para romper el algoritmo (recuperar el plaintext o clave dado algún ciphertext) más que examinando todas las claves posibles, entonces decimos que nuestro algoritmo es seguro. Es aquí donde el largo de la clave toma importancia (mientras más larga la clave, existen más claves posibles a descubrir y entonces hacemos más seguro nuestro cifrado o algoritmo). Al atacar un encriptado se simplifica el número de claves que se necesitan ser descubiertas. El valor de la llave afecta las funciones de encriptamiento y desencriptamiento, quedando como: EK(P)= C DK(C) = P Y si la llave de la encriptación y desencriptación son iguales, entonces: Ciphertext CRIFTOANÁLISIS La primera propuesta de la criptografía es proteger el plaintext (o la llave, o ambos) secreto de los adversarios, interceptores, ó simplemente del enemigo. La Criptoanálisis es la ciencia de recobrar el plaintext de un mensaje junto con la llave. Un intento de criptoanálisis es llamado ataque. Un exitoso ataque es llamado un método. Enseguida mencionaremos los seis métodos de ataque más generales, esta lista se encuentra ordenada según el poder del ataque. 1 .- Atacar solo ciphertext. 2.- Atacar plaintext conocido. 3.- Atacar plaintext elegido. 4.-Atacar plaintext adaptivo elegido. 5.- Atacar ciphertext elegido. 6.- Atacar llave elegida. 17 PROYECTO TERMINAL COMUNICACION INALÁMBRICA DE DATOS ENCWTADOS Y COMPRIMIDOS ENTRE DOS PC’s SEGURIDAD DE CRIPTOSISTEMAS Los criptosistemas tienen diferentes niveles de seguridad, dependiendo de lo difícil que son para romperlos. Todos los algoritmos se pueden romper en teoría, dado un tiempo suficiente y buenos medios de procesamiento. Si el tiempo y dinero requeridos para romper el algoritmo son mayores que el valor de los datos encriptados, entonces este es probablemente seguro. Los algoritmos que no se pueden romper en la práctica son seguros. Un algoritmo es considerado computacionalmente seguro, si no puede ser roto con los medios disponibles. Un algoritmo es incondicionalmente seguro, si el interceptor que realiza el criptoanálisis no cuenta con una parte del ciphertext, puesto que no tiene suficiente información para recobrar el plaintext. El lapso de tiempo de proceso y poder requeridos para recuperar la llave de encriptación es llamado el factor de trabajo, y es expresado como una magnitud. Si un algoritmo tiene un factor de trabajo de 2128,entonces 2’28operaciones son necesarias para romper el algoritmo. La mayoría de los algoritmos de encriptamiento que se usan hoy en día son bloques de cifrados, los cuales operan en una cantidad (generalmente de 64 bits) de datos al mismo tiempo. Los cifrados en cascada operan con longitudes variables de datos. Los cifrados en cascada fueron creados bajo la idea de generar números aleatorios a partir de una base (con la base establecida en la clave); los números aleatorios están combinados en el plaintext para generar el ciphertext. Mientras los números son generados de la manera más apropiada, es más seguro el cifiado en cascada. Los algoritmos en bloques son, en términos de diseño e implementación generalmente más complejos que los cifiados en cascada. FUNDAMENTOS DE COMPRESION Técnicas de compresión Dos técnicas que puden resultar en una codificación de datos más eficiente son la compresión lógica y la compresión física. Ambas compresiones reducen el tiempo de transmisión de datos. La compresión lógica es normalmente usada para representar bases de datos más eficientemente, resolviendo el problema llamado run-away datadase. O sea, el exceso de información provoca el requerimiento de mayor memoria para almacenarla, provocando PROYECTO T E N A L COMUNICACI~NINALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOSENTRE DOS PC’S mayores gastos para la compañia. Sin embargo, si se aplica la compresión lógica se pude evitar tal gasto. En la compresión física cada dato es codificado por separado, y la probabilidad de ocurrencia de los caracteres ó grupos de caracteres difieren. Los caracteres que son menos frecuentes se codifican con más bits, y los más frecuentes son codificados con menos bits. Por lo tanto, el archivo de datos se puede reducir un cierto porcentaje, esto depende del algoritmo utilizado para la compresión. A continuación se ilustra un diagrama de bloques de una compresión básica de datos. Compresión de datos original comprimido Descompresión En la figura se observa que a los datos originales, se le aplica un algoritmo de compresión para producir una ráfaga de datos comprimidos. Esta compresión de los datos originales es referida algunas veces como el proceso de codificación, y el resultado de los datos comprimidos es también llamado ráfaga de datos codificados. El proceso inverso de la compresión es la descompresión, para reproducir los datos originales. Entonces el proceso de la descompresión resulta en la decodificación de la compresión de la ráfaga de datos, el resultado es llamado a veces como ráfaga de datos decodificados. El grado de la reducción de datos obtenida como resultado del proceso de compresión, es conocido como la razón de compresión. Razón de compresión longitud de la ráfaga de datos original = longitud de la ráfaga de datos comprimidos De la ecuación se observa, que entre más grande es la razón de compresión, más eficiente es la técnica de compresión utilizada. BENEFICIOS DE LA COMPRESIÓN Cuando la compresión de datos es utilizada para reducir los requerimientos de almacenamiento, generalmente el tiempo de ejecución de los programas se reduce bastante. PROYECTO TERMINAL COMUNICACION INALÁh4BRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC’s Con respecto a la transmisión de datos, la compresión provee planeación en la red con varios beneficios, además del ahorro en costo asociado con el envío de pocos datos sobre la red de interruptores telefónicos, donde el costo de la llamada es usualmente basada sobre esta duración. Finalmente, el texto es representado generalmente en código ASCII, entonces debemos de pasar el texto a un código diferente para poder comprimirlo, entonces los algoritmos de compresión proporcionan un cierto nivel de seguridad sobre un monitoreo ilícito. PROYECTO TERMINAL COhJNICACION NALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIWS ENTRE DOS PC’s DESARROLLO Y CONSTRUCCI~N El diseño del proyecto se planeó de la siguiente manera: Cada PC consta de tres módulos de hardware: un módem, un módulo para transmisión y un módulo para recepción. En términos generales, la representación esquemática del proyecto se presenta en la siguiente figura. Circuito Transmisor FM Circuito Demodulado ESQUEMA DE MÓDULOS DE HARDWARE PROYECTO T E M A L COMUNICACIÓN INALÁhlBlUCA DE DATOS ENCRIPTADOS Y COMPRIMIWS ENTRE DOS PC’s El módulo de transmisión consta de 3 partes: 0 Un DB-9. o Un circuito modulador FSK. 0 Un circuito modulador de FM. El DB-9 es un simple conector por medio del cual se obtendrán los datos digitales de la interface serial RS-232 de la PC, y se llevarán a la etapa de modulación FSK. El circuito modulador de FSK es el encargado de convertir las señales digitales a señales analógicas cuya frecuencia varia dependiendo del nivel de entrada. Para tal efecto se utilizó el CI XR2206 de la marca EXAR. El diagrama de conexión para este circuito se muestra en las figuras siguientes. AMSI STO MO qT”-h 2 vcc TCI TC2 TRI TR2 SYMA2 SYMAI VVAVEAZ VVAVEAI GND SYNC0 BIAS FSKl 22 PROYECTO TERMINAL COMUNICACI~N INALÁMERICA DE DATOS m c m m s Y COMPWOS ENTRE DOS E'S vcc fl I DIAGRAMA DE CONEXIÓN DEL CI XR2206 El CI XR2206 consta de cuatro bloques funcionaIes, un oscilador controlado por voltaje (VCO), un multiplicador analógico, un amplificador de ganancia unitaria (buffer), y un conjunto de switches de comente. El VCO produce una frecuencia de salida proporcional a la corriente de entrada, la cual es determinada por una resistencia conectada de una de sus terminales a tierra. Con dos de estas terminales, dos Cecuencias discretas de salida pueden ser producidas independientemente una de otra, facilitando así la generación de FSK. Las resistencias antes mencionadas se localizan en el diagrama del XR2206 como R1 y R2, las cuales se conectan a los pines 7 y 8 respectivamente. Dependiendo de la polaridad de la señal lógica en el pin 9, una de estas resistencias es activada, Si en el pin 9 se tiene un voltaje 2 2V, solamente R1 es activada. Similarmente, si el nivel de voltaje en el pin 9 es 5 l V , se activa solo a R2. Entonces, la fiecuencia de salida puede ser acotada a dos niveles, fi y f2 como: PROYECTO TERMINAL COMUMCACIÓN INALÁMBRICA DE DATOS ENCRlpTADOS Y COMPRIMIDOS ENTRE DOS PC’s fl = lí(R1C) f2 = lí(R2C) Para nuestro caso, dicho circuito se diseñó para los siguientes valores de frecuencias: C = lOnf R1 = 33k de aquí fi = 3.3kHz R2 = 77k de aquí f2 = 1.4kHz Además de esto, armado el circuito con la configuración mostrada se obtiene un nivel de salida de: Vsai = Vcc /2 Una vez obtenidas las señales analógicas correspondientes, la siguiente etapa es la de modulación en FM. El circuito utilizado para este fin se muestra a continuación: I I I FIG. MODULADOR DE FM PROYECTO TERMINAL COMLTNICACIÓN INALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE D O S PC’s 0 0 0 El módulo de recepción consta de 3 partes: Un receptor de F.M. Un circuito demodulador FSK. UnDB-9. El receptor utilizado fue un Walkman con sintonía de tipo digital en la banda de F.M. (88-106mhz) debido a la simplicidad de ajustar digitalmente la portadora enviada por el sistema transmisor de datos. Así, con esta ventaja, en la salida del Walkman obteníamos la señal FSK correspondiente a los datos enviados por la PC transmisora. El circuito demodulador de FSK es el encargado de demodular las señales entregadas por el Walkman. En la salida de este circuito, los datos se entregaban como originalmente habían salido de la primera PC,por lo que directamente mediante un conector del tipo DB-9 son recibido por la PC receptora a través de su puerto serial. El C.I.utilizado para la demodulación FSK fue el XR2211, igualmente de la marca EXAR. El diagrama de conexión para este circuito se muestra en las figuras siguientes: vcc TIMCI TIMC2 TlMR LDU Vref NC CUMPI INP LDF GND LOUUN LOUG DO 25 * . PROYECTO TERMINAL C O ~ U N I C A C I ~INALÁMBRICA N DE DATOS ENCRIPTADOS Y COMPRIMIDOSENTRE DOS PC’S DIAGRAMA DE CONEXIÓN DEL CI XR2211 F,q DE ENTRAPA XR-2211 FSK DEMODULADOFUDECODIFICADORDE TONO DESCRIPCIÓN GENERAL El XR2211 es un circuito que opera bajo el principio PLL y que está diseñado especialmente para aplicaciones de comunicación de datos; en particular, para aplicaciones de FSK. Este C.I. opera sobre un amplio rango de voltaje que va desde 4.5 hasta 20 V, y un rango de frecuencia que va desde 0.01Hz hasta 300KHz, además de poder interfacear con familias lógicas como TTL,DTL y ECL. El C.I. internamente consta de un sistema PLL básico para detectar una señal de entrada dentro de la banda de paso; un detector de fase en cuadratura que proporciona la detección de portadora, y un comparador de voltaje FSK que es propiamente el encargado de la demodulación FSK. El sistema PLL está constituido de un preamplificador de entrada, un multiplicador analógico usado como detector de fase, y un oscilador controlado por voltaje (VCO) de precisión. El preamplificador es usado como un limitador tal que señales de entrada típicamente alrededor de 1OmV R M S son amplificadas a una señal de nivel constante. El detector de fase actúa como una compuerta XOR cuya salida produce suma y diferencia de frecuencias de la señal de entrada y de la salida del VCO. PROYECTO TERMINAL COMUNICACIÓN INALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE W S E ' s Cuando estas frecuencias (fIN y fvco) son iguales, entonces la suma de ellas resulta en 2fIN y la resta en O H z . Agregando un capacitor a la salida del detector de fase, la componente de la resultante 2fIN es reducida, dejando un voltaje de DC que representa la diferencia de fase entre las dos frecuencias. Esto cierra el laso y permite al VCO manejar la frecuencia de entrada. El comparador de FSK es usado para determinar si el VCO es manejado por arriba o por abajo de la frecuencia central (comparador de FSK),lo cual produce salidas activa alta y activa baja para indicar cuando el PLL esta amarrado. CARACTRÍSTICAS RANGO DE FRECUENCIA RANGO DE VOLTAJE 0.01Hz HASTA 300KHz DE 4.5V HASTA 2 0 V PORTADORA AMPLIO RANGO DINAMICO DE lOmV HASTA3Vrms ENTRADA ESTABILIDAD DE TEMPERATURA 20 ppm/"C, TIPICO APLICACIONES DEL XR-2211 1 APLICACIONES I DEMODULACION FSK SINCRONIZACION DATOS DECODIFICACION TONOS DETECCION F M DETECCION PORTADORA I I DE DE I I PROYECTO TERMINAL COMUNICACI~NINALÁMBRICADE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC’S RATINGS MÁXIMOS ABSOLUTOS VOLTAJE ENTRADA IDISIPACION DE POTENCIA I 900 mW RECUBRIMIENTO 750 CERAMIC0 mW RECUBRIMIENTO DE 800 PLASTIC0 I mW I I I DECODIFICACIÓN FSK L a figura la. muestra las conexiones básicas para la decodificación FSK. Los componentes externos son definidos como sigue: RO y CO colocan la frecuencia central del PLL, R1 determina el ancho de banda del sistema y C l determina la constante de tiempo del filtro de lazo, y el factor loop-damping. CF y RF forman un filtro de post-detección de un polo para la salida de datos FSK. El resistor RB (= 5 10 KR) que va entre el pin 7 y 8, introduce una retroalimentación positiva a través del comparador FSK para facilitar la transición rápida entre los estados lógicos de salida. Los valores recomendados de 10s componentes para algunas de las bandas FSK más comúnmente usadas se dan en la tabla 1. TABLA 1 DE BANDAFSK VALORES COMPONENTES 300 Baud C0=0.039 pF,CF=0.005pF fl=1070= C1=0.01 pF, RO=18KSZ f2=1270 Hz ~ 1 = 1 0 KR 0 600 Baud C0=0.022 pF, CF=O.OOSpF fl=2025 Hz C1=0.0047 pF, RO=18 KR f2=2225 HZ R1=200 KQ 1200 Baud C0=0.027 pF,CF=0.0022@ fl=1200 Hz Cl=O.Ol pF, RO=18 KR f2=2200 Hz ~ 1 = 3 KR 0 LOS 28 PROYECTO TERMINAL COMUNICACI~N INALÁMBRICA DE DATOS ENCRIPTAWS Y C O M P R ~ M I W ENTRE S w s E’S La función del DB-9en este caso es para llevar los pulsos de la salida del demodulador de FSK hacia la PC. v tw 10 1 DATO DE SALIDA FIG. 1 a: DEMODULADOR FSK DESARROLLO DEL SOFTWARE DE COMUNICACIÓN Con el propósito tanto de la transmisión, recepción y procesamiento de los datos, se desarrolló un programa capaz de realizar dichas funciones, sobre el cual se tuviera un control total, ya sea para modificar la velocidad de transmisión, o para cambiar la aplicación que se realizaría sobre los datos recibidos. El programa se realizó en lenguaje C debido a su facilidad de manejo, pero principalmente a su capacidad de compilar y ligar instrucciones de ensamblador dentro del mismo paquete. El motivo de usar instrucciones de ensamblador es la programación del puerto serial (UART 8250), así como para la transmisiódrecepción de los datos debido a que es una herramienta muy poderosa ya que son instrucciones directas al microprocesador, pero también a su gran facilidad de manejo. PROYECTO TERMINAL COMUNICACION I N A L ~ B R I C ADE DATOS ENCRPTADOS Y COMPRIMIWS ENTRE DOS PC'S El listado del programa usado se presenta a continuación: SOFTWARE DE LA TRANSMISION UNIVERSIDAD AUTONOMA METROPOLITANA UNIDAD IZTAPALAPA PROYECTO TERMINAL #include<stdlib.h> #include<stdio.h> #include<conio.h> #include<process.h> #include<dos.h> #include<ctype.h> #include<string.h> #include<fcntl.h> #include<io.h> #defineMAX 200 #define LONG 20 #defineESC 27 #define EOS 70' #define PORT1 Ox3F8 char menu(void); void abre-archivo(void); char pregunta(void); void inicializa(void); int llena(void); void transmite(void); void cuenta(void); PROYECTO TERMZNAL COMUNICACION INALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC's FILE *@=NULL; char carac,cad[MAX] ; int final,bt=O; char s1[4] ,s4[LONG],arr[LONG], *str1="A:\Y',*str2="B :\Y',* str3="C:\Y'; .......................................................................... ** MODULO PRINCIPAL ......................................................................... **/ void main(void) { char op; dol op=menu(); if(op==' 1') system( "a:edit"); if(op=='2') system("a:enkds.exe"); if(op=='3') system("a:comdsc.exe"); if(op=='4') transmite(); if(op=='S) system("a:rec4.exe"); } while(op!='@); clrscr(); 1 .......................................................................... ** FUNCION QUE DESPLIEGA EL MENU DE OPCIONES ......................................................................... * */ char menu(void) { char resp; clrscr(); window( 1,1,9,25); textcolor(l3LACK); PROYECTO TERMINAL COMUNICACIÓN INALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC's textbackground(GREEN+1); cprintf( 11 11 11 I1 window( 1O, 3,SO ,25); textcolor(I3LACK); textbackground(GREEN); khll 11 11 "1 .-EDITAR U?J' PROGRAMA NUEVO.u.\n" "2.-ENCRPITAIP/DESENCRIPTARUN ARCHTVO.\rui" "3 .-COMPRIMIEUDESCOI"RIMIR UN ARCHIVO.\r\n" "4.-TRANSMITIR ARCHIVO.kh" "5.-RECIBIR ARCHIVO.\r\n" "6.-SALIR.\rui" 11 11 "Elige una opcion: h"); do { resp=getch(); }while(resp<49 11 resp>54); printf('I%cI1,resp); getch0; return(resp); 1 .......................................................................... ** FUNCION QUE ABRE EL ARCHIVO Y DEVUELVE UN APUNTADOR MISMO, VERTFICANDO POSIBLES ERRORES ......................................................................... * */ void abrearchivo(void) { int error; char op; // char s 1[4],s4[LONG],arr[LONG],* str1="A : \ \ I 1 , *str2="B:\\",*str3="C:\\"; AL PROYECTO TERMINAL COMUNICACION [ N A L ~ R I C ADE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC'S do { @=NULL; clrscr(); printf("\n\t«< C A R G A D O R D E P R O G R A M A S EXE >>>"); (BUSQUEDA DE UN ARCHIVO EN DISCO)"); printf("h\t printf("\nh\t"Cu 1 es la unidad de disco donde "); printf("se localiza el archivo(A,B,C)?: "); do { op=toupper(getch()); }while(op<65 11 op>67); printf("%c",op); geW); if(op=='A') strcpy(s1,strl); if(op=='B') strcpy(s1,str2); if(op=='C') strcpy(s1,str3); printf("\n\t\tDame el nombre del archivo a buscar (con extension):\n "); gets(arr); strcpy(s4,sl); strcat(s4,arr); op='n'; error-0; @=fopen(s4,I?+"); if(ferror(@)) { printf(Yn\n\t\tErroral tratar de abrir el archivo. "); error= 1; 1 else { if(@=NULL) { fclose(@); printf("ui\n\t\tNo se encontrg el archivo, "); errox=l; 1 1 if(error) { printf("h\t\t'Deseas buscar en otro archivo(s/n)?: "); op=PreguntaO; 1 } while(op='s'); . * . PROYECTO TERMINAL CdMUNICACIÓN INALhll3RICA DE DATOS ENCRIPTADOS Y COh@RhUDOS ENTRE DOS PC's if( !eiror) { fP=fopen(s4,"r+"); final=feof(fp); 1 else @=NULL; .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . * FUNCION QUE ACEPTA RESPUESTA AFIRMATIVA O NEGATIVA. ......................................................................... *I char pregunta(void) { char resp; do { resp=tolower(getch()); } while(resp!='s' && resp!='n'); printf("%c",resp); getch0; return(re sp) ; 1 .......................................................................... * FUNCION QUE LLENA EL BUFFER DE ENTRADA ......................................................................... */ int llena(void) { int j=O; final=O; do( carac=fgetc(fp); bt--; if(bt==O) final= 1 ; else { cadb]=carac; j++; 34 PROYECTO TERMINAL COMUNICACION INALthBRICA DE DATOS ENCRIPTADOS Y COMPRIMIWS ENTRE DOS PC's 1 }while(! fuial&& j<200); cadlj]=EOS; /*poner condicion de salida*/ returno); 1 .......................................................................... * FUNCION QUE INICIALIZA EL PUERTO DE COMUNICACIONES ......................................................................... */ void inicializa(void) { outportb(P0RT 1 + 1 ,O); outportb(PORT1 + 3,OxSO); outportb(PORT1 + 0,OxSO); outportb(PORT1 + 1,OxOl); outportb(PORT1 + 3,0x03); outportb(PORT1 + 2,0xC7); outportb(PORT1 + 4,OxOB); .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . * FUNCION QUE TRANSMITE ......................................................................... */ void transmite(void) { int tope,i,c; char var; abre-archivo(); if(fp!=NULL) { clrscr(); printf("\n\t<<< C A R G A D O R D E P R O G R A M A S E X E >>>'I); printf("\nb\tPresionacualquier tecla para iniciar la transmision"); printf("\n\t(ESCpara cancelar): "); var=getch(); if(var !=ESC) { inicializa(); PROYECTO TERMINAL COMUNICACI~NINALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC'S cuenta(); printf("ui\t\tIniciando la transmision...hh\t"); delay(500); do { tope=llena(); i=O; while(i<tope) { c=inportb(PORTl + 5); if(c & 0x20) { var=cad[i] ; printf( "%c",var); outportb(PORT1,var); i++; if(i==50 11 i-100 I( i==150 11 i==200) { printf( "ui\t"); 1 1 1 if(final) { var='M'; outportb(PORT1,var); var='A'; outportb(P0RT 1,var); var='R'; outportb(PORT1,var); VFV; outportb(PORT1,var); VF'E'; outportb(PORT1 ,va); vaFtL1; outportb(P0RT 1,var); 1 /* condicion de salida */ }while(!final); printf("ui\t\tArchivo SOmWARE DE LA RECEPCION PROYECTO TERMINAL COMUNICACION INALÁMBRICA DE DATOS ENCRIPTADOS Y CObfFWMJDOS ENTRE DOS PC's #include<stdlib.h> #include<stdio.h> #include<conio.h> #include<process.h> #include<dos.h> #include<ctype.h> #include<string.h> #defineMAX 200 #define LONG 20 #defineESC 27 #define EOS 70' #define PORT1 Ox3F8 char menu(void); void abre-archivo(void); char pregunta(void); void inicializa(v0id); int llena(void); void recibir(void); void brinca(void); char ar[300001; FILE *@=NULL; char carac,cad[MAX]; int final; .......................................................................... ** MODULO PRINCIPAL ......................................................................... **I void main(void) { char op; do { op=menu(); iflop-' 1 I) { recibir(); 1 37 PROYECTO TERMINAL COMUNICACIÓN INALÁMl3RICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE D O S PC's } while(op!='2'); clrscr(); 1 .......................................................................... ** ......................................................................... **I char menu(void) { char resp; clrscr(); printf("h\t\tPROYECTO FINAL "); printf("h\t\tRECEPCION DE ARCHNOS printf("A TRAVEZ DEL PUERTO SERIAL."); printf("hhh\t 1.-RECIBIR..."); printf("h\t2.-SALIR."); printf("hh\tElige una opcion: "); do { resp=getch(); )while(resp<49 11 resp>50); printf("%c",resp); getch0; return(resp); 'I); 1 .......................................................................... ** FUNCION QUE ABRE EL ARCHIVO Y DEVUELVE UN APUNTADOR AL MISMO, VERIFICANDO POSIBLES ERRORES ......................................................................... **/ void abre-archivo(void) fp=fopen(l'a:\\recibido.cmp","w"); 1 .......................................................................... * FUNCION QUE ACEPTA RESPUESTA AFIRMATIVA O NEGATIVA. PRQYECTO TERMINAL COMUNICACIÓN INALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC's ......................................................................... */ char pregunta(void) { char resp; do { resp=tolower(getch()); }while(resp!='s' && resp!='n'); printf("%c",resp); getch0; return(resp); 1 .......................................................................... * FUNCION QUE LLENA EL BUFFER DE ENTRADA ......................................................................... */ int llena(void) { int j=O; fmaI=O; do { carac=fgetc(fp); if(feof(fp)) final= 1; else { cadu]=carac; j++; 1 }while(!fmal && jG00); cadb ]=EOS; /*poner condicion de salida*/ returna); 1 .......................................................................... * FUNCION QUE INICIALIZA EL PUERTO DE COMUNICACIONES ......................................................................... *I 39 PROYECTO TERMINAL COMUNICACI~NINALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIWS ENTRE DOS PC'S void inicializa(void) { outportb(PORT1 + 1,O); outportb(PORT1 + 3,OxgO); outportb(PORT1 + 0,OxSO); outportb(PORT1 + 1,OxOl); outportb(PORT1 + 3,0x03); outportb(PORT1 + 2,0xC7); outportb(PORT1 + 4,OxOB); 1 .......................................................................... * FUNCION QUE TRANSMITE ......................................................................... *I void recibir(void) { int i=O, c, 1,j=O, p=O; char var; abre archivo(); i f(BT=mL) { clrscr(); inicializa(); printf("\n\tIníciando la recepci$n...\n\n\t"); delay(500); while@!=l) { do /* POLEO DEL REGISTRO*/ { c=inportb(PORTl + 5); } while (!( c & 0x01)); var=inportb(PORTl); printf("%c",var); /* LEE EL DATO */ PROYECTO TERMINAL COMUNICACI~N"UCA DE DATOS ENCRIPTADOSY COMPRIMIDOS ENTRE ms K'S ar[i++]T a r ; /* GUARDAR DATO EN BUFFER */ switch(var) { case'M: if (j==O) j++; else j=O; break; case'A': if (j==l) else j=O; break; j++; case'R': if (j==2)j++; else j=O; break; case'V': if (j==3) j++; else j=O; break; case'E': if (j==4) j++; else j=O; break; case'l': if (3-5) else j=O; break; p=l; } /* FIN DEL CASE */ } /* FIN DEL WHILE */ /* REGRESA LAS 5 POSICIONES FINALES */ i=i4; ar[i]=EOS; for ( k 0 ; l<=i; l++) /* ESCRIBE A DISCO */ fprintf(fp,"%Ctf,ar[11); /* CIERRE DE ARCHIVO */ fclose(fp); printf("ui Recepci#n Ok! "); I else printf("h I ** ERROR ** no se pudo crear el archivo"); PROYECTO TERMINAL, COMUNICACIÓN [NALAMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS EN.JTRE DOS PC’s METODO UTILIZADO PARA ENCRIPTAR CIFRADO D E TRANSPOSICION El cifiado de transposición es una simple columna, y el pleintext es escrito horizontalmente con un tramo de tamaño fijo y el ciphertext de salida es leído verticalmente, o sea se lee por columnas. Por ejemplo: Plaintext : EL CAÑON DE SANTA ELENA, SIN LUGAR A DUDAS SE TRATA DE UNA DE LAS GRANDES MARAVILLAS NATURALES DE CHIHUA HUA. E LCAÑONDE S ANTAE L ENA , S I NL UGARAD UDAS S ET RAT ADEUN ADE LA S GRANDE SMA R A V I L L A S NA TURA L E S DE C HI HUA HUA Ciphertext : EASUASRTH LNIDDGAUI CTNAERVRH AALSUAIAU ÑEUSNNLLA OLGEADLEH NEATDEASU DNRRESSDA EAAALMNE S,DTAAAC. Para desencriptarla, es cuestión de escribir el ciphertext verticalmente sobre un tramo, de idéntico tamaño que en la encripción, y entonces leer el plaintext de salida horizontalmente. Obteniendo así el pleintext original. Este tipo de algoritmo, es muy utilizado en los criptosistemas modernos, esto es dificultoso, ya que se requiere de una ranura de memoria, y el mensaje tarda un poco para poder establecer un tamaño ó longitud certeras para desarrollar el algoritmo. PROYECTO TERMINAL COMUNICACIÓN INALÁMf3RICA DE DATOS ENCRPTADOS Y COMPRIMIDOS ENTRE DOS pc's DESARROLLO DEL SOFTWARE DE LA ENCRIPTACI~NY DESENCRIPTACI~N ................................................................. I* /* UNlVERSIDAD AUTONOMA METROPOLITANA /* PROYECTO TERMINAL /* */ */ */ *I ................................................................. #include <conio.h> #include <string.h> #include<stdio.h> #include <dos.h> #include<io.h> #include Cstdlib.h> #include <math.h> #include<fcntl.h> #include<a:\ayuda.h> #include<a:\pantalla.h> #define MAX 30000 #define TIME 200 #define TIMER 2500 int val-llave(void); int abre arch(char *nombre,int,int); int caicula(int); void encripta(char in[MAX],char out[MAX],int cte,unsigned bytes); void desencripta(char in[MAX],char out[MAX],int cte,unsigned bytes); void ayud(void); char menu(void); void opcion(char); void encriptar(v0id); void desencriptar(v0id); void extension(char *in,char *out,int opcion); ' . PROYECTOTERMINAL COMUNICACION I N A L k B R I C A DE DATOS ENCFUPTADOS Y COMPRIMIDOS ENTRE DOS PC's void encripta(char in[MAX],char out[MAX],int cte,unsigned bytes); void pide-datos(char *name,& *valor,int opcion); void main(){ char tecla; char nom[25]="ENCRIRTAR-DESENCRIPTAR"; clrscr(); bienvenida( 1,nom); do{ tecla = menu(); if(tecla!='4'){ opcion(tec1a); clrscr(); 1 1while(tecla!='4'); limpiajantalla( 1,1,80,25); clrscr(); 1 char menu(void){ char tecla; limpiaqantalla( 1,1,80,25); cuadricula(2,2,79,23,1,15); cuadricula(15,8,60,18,1,15); textcolor(RED); gotoxy(5,2); cprintf("MENu"); gotoxy(293); cprintf( "(1)ENCRIPTAR"); gotoxy(2,4); cprintf("(2)DESENCRIPTAR"); JNA OPCIO PROYECTO TERMINAL COMUNICACI~NINALÁMBRICA DE DATOS ENCRLPTAWS Y COMPRIMIDOS ENTRE DOS PC'S tecla = getch(); } while(!strchr("l234",tecla)); return(tec1a); 1 void opcion(char tecla){ clrscr(); if(tecla=='l') encripta(); if(tecla--'2') desencripta(); if(teclae'3') ayudo; 1 /*funcionesprincipales*/ void encriptar() { clrscr(); calcula( 1); void desencripta0 { clrscr(); calcula(2); cprintf("estas en desencriptar"); } void ayudo{ char *tex="ayuda.txt"; limpiajantalla( 1,1,80,25); cuadricula(2,2,79,23,1,15); textcolor(RED) ; ayuda(tex); gotoxy(22,22); cprintfl"PRESI0NE CUALQUIER TECLA PARA CONTINUAR"); getche(); 1 /*esta funcion realiza la encriptacion o desencriptacion segun sea el valor de opcion */ int calcula(int opcion){ char nombre[ 1S],nameout[ 153; int valor,valido=O; int handle,handlel,i; PROYECTO TERMINAL COMUNICACIÓN INALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC's unsigned bytes,count; char buqMAX1,bufl [MAX]; valido=O,i=O; do { pide-datos(nombre,&valor,opcion); valido= abre-arch(nombre,valor,opcion); i++; } while(valido==1 ~ 3 ) ; if(opcion==l){ gotoxy(8,6); cprintf("FIN DE ENCRIPTA"); return O; 1 if(opcion-2) { gotoxy(8,6); cprintf("FIN DE ENCRIPTA"); return O; 1 return O; } /*esta funcion pide datos al usuario nombre del archivo ruta y la llave para encriptar o desencriptar*/ void pide-datos(char *name,int *valor,int opcion){ char numero[ 1291; long int llave-val; long int numero val; int f,valido,ban<i,handle; limpiajantalla( 1,1,80,25); cuadricula(2,2,78,23,1,15); cuadricula(5,4,70,12,1,15); textcolor(RED); if(opcion==l){ gotoxy(25,2); cprintf("ENCRIPTAR); ]else { gotoxy(25,2); cprintf("DESENCRIPTAR"); 1 band=O; i=O; do{ gotoxy(7,4); cprintf("N0MBRE Y RUTA DEL ARCHNO I' ); gets(name); if Cdosopen(name, O-RDONLY, &handle) != O) { gotoxy(7,4); delhe(); gotoxy(7,4); cprhtf("N0 PUEDE HABRIR ARCHIVO"); PROYECTO TERMINAL, COMUNICACIONINALAMBIUCA DE DATOS ENCRIPTADOS Y COMPR~MIWSENTRE DOS PC'S delay(TIMER); dellhe(); gotoxy(7,4); cprintf("RUTA O NOMBRE! INVALIDO"); delay(TIMER); delhe(); band= 1; i++; 1 } while(band== 1&&i<3); if(i==3) { limpiajantalla( 1,1,80,25); clrscr(); textcolor( 15); exit( 1); 1 gotoxy(7,5); cprintf("SELECCI0NE LA LLAVE :'I); gotoxy(7,6); cprhtf("RECUERDE QUE ESTA EN EL "); textcolor( 14); gotoxy(35,6); cprintf("INTERVAL0 [O-2551"); textcolor( 15); cuadricula(5,15,70,22,10,0); textcolor(2); *valor= val-llave(); 1 /* da el nombre de salida con su extension*/ void extension(char *h,char *out& opcion)( int i=O; strcpy(out,""); /*nombre de archivo de salida =al de entradad*/ while(in[i] !='\O'){ if(in[i] r- break; out[i] = in[i]; i++; I.') 1 if(opcion== 1){ if(in[i] !='\O'll i<9 ){ out[i++] = out[i++] = 'k'; out[i++] = Y; out[i++] = 'if; '.I; 1 /*crea extension*/ /*para encriptaci$n*/ 1 if(opcion==2){ if(in[i] !='\O'l/ i<9 ){ out[i++] = I.'; /*extensign delarch desencriptado*/ PROYECTO TERMINAL COMUNICACI~NINALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC'S out[i++] out[i++] out[i++] = 'u'; =Y; =Y; 1 1 out[i] = '\Of; 1 /*lecturade los bloques del archivo de entrada a memoria y de memoria al archivo de salida */ int abrearch(char *nombre& valor,int opcion) { char nameout[ 151; int handle,handle1 ; unsigned bytes,count; char buf[MAX],bufl [MAX]; int band =O; extension(nombre,nameout,opcion); if(opcion== 1){ i f Cdosopen(nombre, O-RDONLY, &handle) != O) { gotoxy(5,3); cprintf("N0 PUEDE HABRIR ARCHIVO"); gotoxy(5,3); cprintf("RUTA O NOMBRE INVALIDO"); dellhe(); band = l ; return band; 1 1 if(opcion==2) { i f Cdosopen(nombre, O-RDONLY, &handle) != O) { gotoxy(6,3); cprintf("n0 puede habrir el archivo de entrada"); delay( TIMER); delay(TIMER); band = l ; return band; 1 1 i f Cdoscreat(nameout, -ANORMAL, &handle1 ) != O){ gotoxy(6,4); cprintqlho puede crear el archivo de salida"); delay(=); band= 1 ; return band; 1 do{ i f Cdos-read(handle, buf, MAX, &bytes) != O) { cprintf("n0 puede leer archivo de entrada"); 48 . + PROYECTO T E m A L COMUNICACION lNALÁh4BRICA DE DATOS ENCRJPTADOS Y COMPRIMIDOS ENTRE DOS X ' s delay(TIME); band =l; return band; I else { if(opcion=l){ encripta(buf,bufl ,valor,bytes); if Cdos-write(handle 1, bufl ,bytes, &count) != O) { cprintf("no puede escribir a archivo de salida"); delay(TIME); band= 1; return band; 1 1 if(opcion--2) { desencripta(buf,bufl ,valor,bytes); if (-dos-write(hand1e 1, bufl ,bytes, &count) != O){ cprintf("no puede escribir a arcivo de salida"); delay(-); band= 1; return band; I 1 1 }while(bytes==MAX); -dosclose(hand1e 1); -dos-close(hand1e); return O; 1 /* esta funcion realiza la encriptacion*/ void encripta(char in[MAX],char out[MAX],int cte,unsigned bytes){ int i=O; for(i=O;i<bytes;i++) { out[i] = in[i] + cte; if((int)out[i]>255) out[i] = out[i] - 255; 1 out[i]='\O'; 1 int val-llave(void) /* validacion de la base para rango [O-255]*/ { char entrada 1[71; int llave,i,c; long d; PROYECTO TERMINAL COMUNICACION INALÁh4BRICA DE DATOS ENCRlpTAwS Y COMPRIMIDOS ENTRE DOS PC's do{ textcolor( 14); gotoxy( 2 5,l); cprhtf( "LLAVE: "); for(i=O;i<5;i++) { c = getch(); i f (c==13){ entrada 1 [i]='\O'; break; } else if( 6 4 81\05 7) 1--; else entrada1 [i]=c; 1 llave=atol(entrada 1 ); textcolor( 15); gotoxy(25,l); cprintf("LLAVE:"); gotoxy(3 5,l); cprintftentrada1); iftllave < O )I llave >255){ gotoxyt 15,l); cprintf("LLAVE INVALIDA"); delay(TIMER); dellhe(); 1 }while(llave < O I( llave >255); return llave; 1 /*esta funcion realiza la desencriptaci$n*/ void desencriptatchar in[MAX],char out[MAX],int cte,unsigned bytes) { int i=O; for( i=O;i<bytes;i++) { out[i] = in[i] - cte; if((int)out[i]>255) out[i] = out[i] + 255; } out[ i]='\O'; 1 PROYECTO TERMINAL COMLJNICACI~NINALÁMBRICA DE DATOS ENCRIPTADOSY COMPRIMIWS ENTRE DOS PC’S METODO UTILIZADO PARA COMPRIMIR CODIGO DE HSJFFMAN El código de Hufñnan es un método para crear un código de longitud de un código fijo. La idea básica del código de Hufñnan es: Cada uno de los bits de la salida tiene reservado la misma cantidad de espacio, y cada bit debe de tener la misma probabilidad. Este método tiene su origen en el código de Shannon-Fano, en el cual se crea un árbol con todos los caracteres empezando por la raíz y desglosándolo según las ocurrencias de cada uno. Cada ramificación debe de sumar la misma probabilidad. Ejemplo : Imaginemos que sabemos el número de ocurrencias de cada símbolo. Si la entrada de los caracteres es (aabbaac), entonces el conteo de la ocurrencia es: c (a) = 4 c(b) = 2 c(c)= 1 Entonces, el árbol queda: a l 4 I root \ 3 \ I b 1 2 X \ 1 \ C PROYECTO TEiUvUNAL COMUNICACION NALÁMBRICA DE DATOS ENCRIPTADOS Y COMpR[MIDoS ENTRE DOS PC’s El número en cada rama indica la suma de fiecuencia en las “subárboles”. Como se puede observar las sumas no son iguales, entonces se dice que el código y la entropía no son buenos. Para resolver este problema, tomamos todos los caracteres y cada uno tiene una ocurrencia asociada a esta, y entonces se pone en nodos que no se enlazan o se conectan. Llamados estos como SO.Entonces C(S0) es la suma de todos los conteos en SO. Tomamos el nodo con el conteo más alto, y lo asignamos a una S1. Ahora C(S0) es el más bajo. Y así sucesivamente hasta que C(S1) > = C(S0). Ahora los datos se dividen de la siguiente manera: Ahora, tomando [S 13 como punto de partida, y dividiendo este en [S2]y [S 11. Hacemos lo mismo para [SO],dividiéndolo en [S3]y [SO]. Ejemplo : C(a> = 4‘ C(b) = 2 C(c) = 1 C(d) = 1 SO = { a, b, c, d }, C(S0) =8 Y se obtiene: S1 = {a}, C(S1) = 4; SO = {b, c, d}, C(S0) = 4 El conteo es igual y se tiene un solo miembro, por lo tanto se para la construcción de S 1. SO = {b, c, d}, C(S0) = 4 Se saca b para hacer S2. 52 PROYECTO TERMINAL, COMUNICACIÓN INALAMBRICA DE DATOS ENCRIPTADOS Y COMF'RIMIDOS ENTRE DOS E ' s S2 = {b}, C(S2) = 2; SO = {c, d}, C(S0) = 2 El conteo es igual y tiene un solo miembre, entonces se para la edificación de S2. SO = {c, d}, C(S0) =2 Tomando S2 = { c } , y SO = {d}, como se tiene un solo miembro hemos terminado. Quedando el árbol como sigue: a l 4 I b 1 2 root \ I X C I 1 \ 2 \ I X \ 1 \ d En el código de Huf€inan, tomamos una lista de todos los caracteres, poniendo los nodos en la hoja, y dando a cada nodo un conteo igual al conteo de los caracteres en ésta. Estos nodos no tienen origen. Ahora, olvidemos que estos son caracteres y los llamaremos los nodos con conteo. La clasificación se hace según el conteo, el conteo más bajo es el primero. Tomamos los dos nodos de conteo más bajos, y hacemos un nuevo nodo como el origen de estos dos, y el conteo del nuevo nodo es igual a la suma de estos dos conteos. Ahora se suma este nuevo nodo a la nueva lista de clases. Esto se repite hasta que en la lista quede solo un miembro, y entonces se ha llegado a la raíz y es cuando entonces se ha terminado. Ejemplificaremos este método para que quede más claro: [a] = 4 [b] = 2 [c] = 1 [d] = 1 ‘ . PROYECTO TERMINAL C ~ M U N I C A C I ~INALÁMBRICA N DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC’S [ 3- indica un nodo, así [ [XI, [y], [z] 3 es un nodo con dos derivados; entonces se tiene una hoja [XI, y uno tiene dos derivados en el mismo, [y] y [z]. Si [XI = N, el conteo de este nodo es N. inicializando el código; los listamos desde el conteo más bajo. [c] = 1 [d] = 1 [b] = 2 [a] = 4 Tomamos los dos más bajos: [c] y [d], y hacemos un nuevo nodo: [[c], [d]] lo ubicamos en la clase de orden [b] = 2. = 2,entonces [a] = 4 Nuevamente, tomamos los dos más bajos: [b] y [[c], [d]], y hacemos un nuevo nodo: [[blY [[CIY [dlll = 4 [a] = 4 Finalmente, elegimos los dos más bajos y hacemos un nuevo nodo: [[al, [PI, [CIY [dl11 = 8 Hemos llegado a la raíz, ya que es solo nodo. El árbol queda: a l 4 b I 1 2 root \ I X C I 1 \ 2 \ I X \ 1 \ d PROYECTO TERMINAL COMUNICACI~NINALÁMBIUCA DE DATOS ENCRIPTADOSY COMPRIMIDOSENTRE DOS PC’S Este código tiene los principios del código Shannon-Fano, pero su análisis es más fácil y rápido. DESARROLLO DEL SOFTWARE DE COMPRESIÓN Y DESCOMPRESIÓN ................................................................. /* *I /* UNIVERSIDAD AUTONOMA METROPOLITANA */ /* PROYECTO TERMINAL */ /* */ ................................................................. #include <conio.h> #include <string.h> #incIude<stdio.h> #include <dos.h> #include<io.h> #include <stdlib.h> #include <math.h> #include<fcntl.h> #include<a:\ayuda.h> #include<a:\pantalla.h> #define MAX 30000 #define TIME 200 #define TIMER 2500 struct tabla{ unsigned char carac; unsigned int fiec; } tabla[256]; int val-llave(void); int abre-arch(char *nombre,int,int); int calcula(int); void inicializa(void); void fiecuencia(unsigned char in); void ordena(void); int table(void); int busca(unsigned char carac,int); void comprim(char *in,char *out& cont); void.descomprim(char *in,char *out,unsigned descuento); void calcula 1 (int opcion); PROYECTO TERMINAL COMUNICACIÓN INALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS X ' s char menu(void); void opcion(char); void comprime(void); void extension(char *in,char *out& opcion); void ayuda(void); void pide-datos(char *name); void descomprime(void); /*INICI PROGRAMA PRINCIPAL*/ void main(){ char tecla,*texto="COMPRIME-DESCOI"RIh'lE''; clrscr(); bienvenida(3 ,texto); do { tecla = menu(); if(tecla!='4') { opcion(tec1a); clrscr(); 1 1 } while(tecla! ='4'); limpiaqantalla( 1,1,80,25); clrscr(); /* muestra un menu en pantalla */ char menu(void) { char tecla; limpiaqantalla( 1,1,80,25); cuadricula(2,2,79,23,1,15); cuadricula( 15,8,60,18,1,15); textcolor(I3ED); gotoxy(5,2); cprintf( "MENU"); gotoxy(2,3); cprintf("( 1)COMPRIME"); gotoxy(2,4); cprintf'("( 2)DE SCOMPRIME"); gotoxy(2,5); cprintf( 3)AYUDA"); gotoxy(2 ,O cprintf( "(4)SALIR"); gotoxy(2 Ir( 97); PROYECTO TERMINAL COMUMCACIÓN INALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE WS Pc'c cprintf("INTR0DUZCA UNA OPCION do { tecla = getch(); 'I); } while(!strchr("l234",tecla)); return(tec1a); /* llama ala funcion a realizarze dependiendo de la tecla de entrada oprimida*/ void opcion(char tecla) { clrscr(); if(tecla=='l') comprime(); if(tecla-'2') descomprime(); if(tecla=='3') ayuda(); } void comprime() { clrscr(); calcula( 1); void descomprime(void) { clrscr(); calcyla l(2); 1 void ayuda(){ char *tex="ayuda2.txt"; limpiajantalla( 1,1,80,25); cuadricula(2,2,79,23,1,15); textcolor(RED); ayucía(tex); gotoxy(22,22); cprintq"PRESI0NE CUALQUIER TECLA PARA CONTINUAR'); getche(); 1 /* FUNCION PRINCIPAL DONDE SE LLEVA LA COMPRESION*/ int calcula(int opcion){ PROYECTO TERMINAL COMUNICACIÓN INALÁMBRICA DE DATOS ENCRIPTADOS Y COMpRIh4IDOS ENTRE W S E ' s char nombre[ 1S],nameout[ 151; int valor; int handle,handle1,i,cantidad; unsigned bytes,count; char buflMAX1,bufl [MAX]; inicializa(); pide-datos(nombre); if (-dos-open(nombre, O-RDONLY, &handle) != O) { gotoxy(5,4); cprintf("no puede habrir el archivo "); return 1; 1 extension(nombre,nameout,opcion); do { if Cdosread(handle, buf, MAX, &bytes) != O) { cprintf("no puede leer de %sf'); return 1; 1 else for(i=O ;i<bytes;i++) fiecuencia(bufli]); } while(bytes==MAX); -dosclose(hand1e); ordena(); cantidad =table(); /*ORDENA EN ORDEN DE MAYOR FRECUENCIA*/ /*table() da en numero de caracteres existentes*/ comprim(nombre,nameout,cantidad); gotoxy(8,6); cprintq"FIN DE COMPRIMIR"); delay(TIh4ER); return O; 1 /*funcion que pide datos de entrada*/ void pide-datos(char *name){ char numero[l29]; long int llave-val; long int numero-val; int f,valido,i=O,band,handle; limpiaqantalla( 1,1,80,25); ' * - PROYECTOTERMTNAL COWNICACI~N INALÁMBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC'S cuadricula(2,2,78,23,1,15); cuadricula(5,4,70,12,1,15); gotoxy(25,2); textcolor(ñED); cprintf("C0MPRIMIR"); do{ band=O; gotoxy(7,4); cprintf("N0MBRE Y RUTA DEL ARCHIVO gets(name); if Cdos-open(name, O-RDONLY, &handle) != O) { gotoxy(7,4); delhe(); gotoxy(3,4); cprintf("no puede habrir el archivo "); delay(TIMER); dellhe(); gotoxy(3,30); cprintqname); gotoxy(3,4); cprintf("RUTA O NOMBRE INVALIDOS"); dellhe(); delay(TIMER); band=l; i++; 1 } while(i<3&&band==1); /* da el nombre de salida con su extension*/ void extension(char *in,char *out,& opcion){ int i=O; strcpy(out,""); while(in[i] !='\O'){ if(in[i] == break; out[i] = in[i]; i++; I.') 1 if(opcion-- 1){ if(in[i] !='\O'Il i<9 ){ out[i++] = '.I; out[i++] = out [i++] = 'm'; out[i++] = 'PI; IC'; 1 1 if(opcion==2){ if(in[i] !='\@I1 i<9 ){ out[i++] = out[i++] = Id'; out[i+-t] = Y ; out[i++] = 'm'; '.I; 'I ); PROYECTO TERMINAL COMUNICACIÓN I N A L h R I C A DE DATOS ENCRIPTADOS Y COMPRIMTDOS ENTRE DOS PC's I } out[i] = '\O'; 1 void inicializal (void) { int i; for(i=O;i<256;i++) { tabla[i].carac = O; I I void inicializa() { unsigned char j=O; int i; for(i=O;i<25 6;i++) { tabla[i].carac = j++; tabla[i].fiec = O; I 1 void fiecuencia(unsigned char in){ tabla[in] .fkec++; 1 void ordena() { struct tabla aux; int i=Oj; int bandera= 1 ; while(i<=25 5&&bandera) { //bandera= O; foru =i+ 1 ;i<=2 5 5 ;i++) if(tabla[ i] .fiec<tablaD] .fiec) { aux.carac = tabla[i].carac; aux.fiec = tabla[i].fiec; tabla[i] .carac = tablati] .carac; tabla[i] .fiec = tablaU].fiec; tablati].carac = aw.carac; tablati].fiec = aux.fiec; bandera = 1 ; 1 i++; I PROYECTO TERMINAL COMUNICACI~NINALPLMBIUCA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS PC'C int table() { int i=O; while(tabla[i] .fiec>O&&i<256) i++; return(i); } int busca(unsigned char carac,int cont){ int i=O; while(tabla[ i] .carac !=carac&&i<cont) i++; retum(i+l); 1 void comprim(char *in,char *out& cont){ FILE *salida; int handle,handle1,alfa,bandera=1; char bufIMAX]; char bufl [MAX]; unsigned char carac; unsigned bytes,count,delta,gama=O; long i,lugar,mascara,pos; if Cdos-open(in, O-RDONLY, &handle) != O) { cprintf("no puede habrir elarchivo %s",in); exit(0); 1 salida = fopen(out,"wb"); fwrite(&cont,sizeoflcont), 1,salida); for(i=O;i<cont;i++) fwrite(&tabla[i] .carac,sizeoqtabla[i] .carac), 1,salida); fclose(salida); if ((handle1 = open(out, O-APPEND I O-WRONLY 1 OBINARY )) =-1) { cprintf("no puede crear el archivo %s",out); PROYECTO TERMINAL COMUNICACI~NINALÁMBRICADE DATOS E N c w m s Y COMPRIMIDOS ENTRE DOS exit( O); 1 do{ i f Cdosread(handle, buf, MAX, &bytes) != O) { cprintf("no puede leer de %s",in); exit(0); 1 else { gama = O; delta = O; carac = buflgama]; lugar = busca(carac,cont); mascara = 255; pos = 7; while(gama<bytes) { for(+ 1 ;i<=lugar;i++) { if(pos<O) { bufl [delta] = mascara; if((delta+l )==MAX){ i f ((alfa -Mte(handlel, bufl,delta+l)) { cprintf("no puede escribir a %s",out); exit(0); I bandera=O ; 1 if(bandera) delta++; else { delta=O; bandera= 1 ; 1 pos = 7 ; mascara = 255; 1 if(i=lugar) mascara -= pow(2,pos); pos--; 1 gama++; carac = buqgama]; -1) PC'S PROYECTO TERMINAL COMUNlCACION INALÁMBRICA DE DATOS ENCRIPTADOS Y COMF'R[MIDoS ENTRE DOS PC's lugar = busca(carac,cont); 1 if((delta+ l)==MAX) { i f ((alfa wite(handle1, bufl,delta+l)) =- 1 ) { cprintf("no puede escribir a %s",out); exit(0); 1 delta=O; 1 bufl [delta] = mascara; i f ((alfa Wte(handle1, bufl,delta+l)) = -1) { cprintf("no puede escribir a %s",out); exit( O); } 1 } while(bytes==MAX); -dosclose(hand1e 1); -dosclose( handle); } /* funcion principal que lleva a cabo la descompresion */ void calcula 1 (int opcion){ FILE *ap; char line[l29]; char nombre[ 1 S],nameout[ 151; int i,cantidad; unsigned descuento=O; inicializa(); pide-datos( nombre); ap = fopen(nombre,'lrbl'); if(ap=NLJLL) { gotoxy(3 3);cprintfl"archivo no localizado"); exit(EXIT_SUCCESS); } Cead(&cantidad,sizeoqcantidad), 1 ,ap); if(cantidad>256) { gotoxy(7,5); cprintf("archivo no es un archivo comprimido"); exit(E7UT-SUCCESS); 1 descuento =cantidad +2; PROYECTO TERMINAL C ~ M U N I C A C I ~INALAMBRICA N DE DATOS ENCRIPTADOS Y COMPRMDOS ENTRE DOS E'S for( i=O; i<cantidad;i++) fiead(&tabla[i] .carac,sizeof(tabla[i] .carac), 1 ,ap); fclose(ap); extension(nombre,nameout,opcion); descomprim(nombre,naeout,descuento); limpiajantalla( 1,1,80,24); fclose(ap); 1 /* funcion que realiza la descompresion*/ void descomprim(char *in,char *out, unsigned descuento) { int handle,handle1 ; char buqMAX],bufl [MAX]; unsigned bytes,count,delta=O,gama=O; unsigned char carac; int i,mascara,pos; if (-dos-open(in, O-RDONLY, &handle) != O) { cprintf("no puede habrir el archivo "); exit(0); I i f (-dos-read(handle, buf, descuento, &bytes) != O) { cprintf("n0 puede leer de "); exit(0); 1 if cdoscreat(out, A-NORMAL, &handlel) != O) { I cprintf("n0 puede crear el archivo 'I); exit( O);; do { i f Cdos-read(handle, buf, MAX, &bytes) != O) { cprintf("no puede leer de "); exit(0); 1 else { gama = O; delta = O; PROYECTO TERMINAL COMUNICACI~NINALÁMBRICA DE DATOS ENCRIPTADOSY COMPRIMIM)~ENTRE DOS carac = bufigama]; mascara = 128; pos = o; while(gama<byíes){ if(mascara&carac) { pos++; 1 else { bufl [delta] = tabla[pos].carac; delta++; pos=o; I mascara »=l ; if(!mascara){ mascara = 128; gama++; carac = buqgama]; 1 I if (-dos-write(handle1, bufl ,delta, &count) != O) cprintf("no puede escribir a %s",out); exit(0); 1 I } while(bytes==MAX); -dos-close(hand1e 1); -dos-close(hand1e); 1 K'S PROYECTO T E M A L COhWNICACIÓN [NALhfBRICA DE DATOS ENCRIPTADOS Y COMPRIMIDOS ENTRE DOS P C ’ s CONCLUSIONES El proyecto ideado cumplió con el objetivo propuesto, ya que se realizó la transmisión de caracteres de una PC hacia otra, con el apoyo del hardware y del software diseñados para tal efecto. Sin embargo, se presentaron algunos inconvenientes, como por ejemplo: para los circuitos EXAR, se tenían problemas de estabilidad ya que a pequeñas variaciones de los potenciómetros que originalmente debían utilizarse, las señales correspondientes de FSK sufrían distorsiones considerablemente grandes. Una forma de solucionar el problema fue el siguiente: una vez armados los circuitos con los potenciómetros correspondientes y ajustados correctamente, se midió el valor de resistencia de cada uno y se sustituyó con resistencias fijas de valores lo más aproximado posible. Aún cuando estas resistencias no eran exactamente iguales al valor de los potenciómetros, las distorsiones eran despreciables; las únicas variables que se modificaban un poco eran la amplitud y la frecuencia de las señales de FSK, lo cual no afectó en lo más mínimo al buen funcionamiento del proyecto en general. Otra contingencia que se presentó fue con los moduladores de FM, ya que, como se mencionó en el reporte, se eligió trabajar en la banda comercial de radiodifusión de FM, con lo cual, el ancho de trabajo permitido era pequeño, y la estabilización del transmisor se dificultaba debido al valor de las bobinas con las cuales se controlaba el valor de la frecuencia portadora. Para contrarrestar este hecho, se estabilizó cada circuito variando el valor de la bobina y aislándola para evitar así, cambios en la frecuencia portadora, lo cual funcionó adecuadamente. El punto que menores problemas ocasiono fue la programación del software, ya que el compilador de Turbo C, es relativamente accesible y presenta la facilidad de compilar y ligar instrucciones de ensamblador, con lo cual, la programación del UART 8250 no tuvo mayores complicaciones. PROYECTO TERMINAL COMUNICACI~NINALÁMBRICA DE DATOS ENCRIPTADOSY COMPRIMIDOS ENTRE DOS PC'S BIBLIOGRAFÍA Introducción a los Sistemas de Comunicación " Ferrel G. Stremler Ed. Addison Wesley Iberoamericana U.S.A. 1993 " " Comunicactions Systems " A. Bruce Carlson Ed. McGraw-Hill U S A . 1986 Madem Handbook for the Communications Professional " Cass Lewart Intertext Publications Inc. U.S.A. 1987 " Information Transmission, Modulation and Noise '' Mischa Schwartz Ed. Mc Graw-Hill U.S.A. 1990 " " Compilation of Data Communications Standars " Harold Folts, Harry R.Karp Ed. Mc Graw-Hill U.S.A. 1980 0 c. Communication System Engineering Handbook " Donald H. Hamsher Ed. Mc Graw-Hill U.S.A. 1990 0 " Teleinformática y Redes de Computadoras " Antonio Alabo Muííoz Ed. Marcombo México 1987 0 0 " " Data Compression" Gilbert Held Ed. John Wiley & Sons 67 PROYECTO TERMINAL, COMUNICACIÓN INALAMBRICA DE DATOS ENCRIPTADOS Y COMpR[MIwS ENTRE DOS P C ' s Great Britain 1987 0 "Applied Cryptography " Bruce Schneier Ed. John Wiley & Sons U.S.A. 1994 C: A Reference Manual " Samuel P. Harrison Ed. Prentice Hall U.S.A.1987 0 " MANUALES. 0 National Interface Databook o Manual de Circuitos EXAR PAGINAS ELECTRÓNICAS DEL WORLD WIDE WEB (www) 0 PáginadeEXAR: http://www.exar.com 0 Página de NATIONAL: http://www.national.com 0 Página de MOTOROLA: http ://www.mot.corn 0 Página de referencias del RS-232: http://www.asic.com 0 Página del modulador de FM http://www.elektron.et.tudelft.n1 0 Página de Criptografia http://www.mach5.com/crypto/concepts.html Página de Compresión http://mms.utexas.edu/ cbloom/algs/statisti.html