Codizy


 

Este programa lo hice en la universidad cuando me creía un excelente programador sólo por hacer las cosas de la manera más dificil o por meter la mayor cantidad posible de operaciones en una sola línea. Como ahora me creo mucho menos ya no me ando ahorrando lineas ni comentarios si de legibilidad se trata. He revisado el proyecto y compila y corre bien en Win98 y winXP. Este programa fue creado usando Borland C++ 3.1. Lo necesitarás si quieres compilarlo. Los archivo fuentes son:


codizy.h



//--------------------------------------------------------------
// CODIZY.H
//--------------------------------------------------------------
#include "soporte.h"

#ifndef _CODIZY_H_
#define _CODIZY_H_

#define NC 11

//-------------------------------
// FUNCIONES DE PANTALLA
//
void	cuadro (int color);
void	cuadro1 (void);
void	cuadro2 (void);

//-------------------------------
// FUNCIONES CODIFICADORAS
//
void	ordig(int n,int opi,int v[128],int d);
long	cody(char archivo[81],int op);

//-------------------------------
// FUNCION DE ARCHIVO
//
void	borrar_archivo(char archivo[81],long tam);

//-------------------------------
// Fragmentador
//
void	fragmentar(void);

//-------------------------------
// Defragmentador
//
void	defragmentar(void);

//-------------------------------
//FUNCIONES DEL MENU
//
void	crear(void);
void	leer(void);
void	borrar(void);
void	codificar(void);
void	observar(void);
int		caratula(void);

#endif

soporte.h



//--------------------------------------------------------------
// SOPORTE.H
//--------------------------------------------------------------
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

#ifndef _SOPORTE_H_
#define _SOPORTE_H_

void 	_cuadro (int xs, int ys, int xi, int yi, int col);
void 	_pon (char * cad, int x, int y, int col);
int 	c_i (char c);
void	l_cad (char *p);

#endif

soporte.c



//--------------------------------------------------------------
// SOPORTE.C
// Creado: 1998 - Esau R.O.
//--------------------------------------------------------------

#include "soporte.h"

char  *tipocuadro[6]={"�","�","�","�","�","�"};

//--------------------------------------------------------------
//  Imprime un cuadro en pantalla
//
void _cuadro (int xs, int ys, int xi, int yi, int col)
{
  char *pt;  int c;

  clrscr();
  textcolor(col);
  pt=tipocuadro[0];
  gotoxy(xs,ys); cputs(pt);

  for (c=1;c<xi-xs;c++)
  {
    gotoxy(xs+c,ys);cputs(pt+2);
    gotoxy(xs+c,yi);cputs(pt+2);
  }

  gotoxy(xi,ys);  cputs(pt+4);

  for (c=1;c<yi-ys;c++)
  {
    gotoxy(xs,ys+c); cputs(pt+6);
    gotoxy(xi,ys+c); cputs(pt+6);
  }

  gotoxy(xi,yi);  cputs(pt+8);
  gotoxy(xs,yi);  cputs(pt+10);
}

void _pon (char * cad, int x, int y, int col)
{
  textcolor(col);
  gotoxy(x,y);
  cputs(cad);
}

//--------------------------------------------------------------
//  Debido a la forma de almacenar los caracteres y enteros
//  la obvia: i=(int)c no funcion� con el programa "Cody"
//  Ten�amos que evaluar:  v_cod[(int)c] esta expresi�n funcionaba
//  para caracteres desde '\0' -'\127' pero cuando c=� ('\165')
//  (int)c daba un valor de -91 (aunque enla ventana WATCH decia 165)
//
int c_i (char c)
{
  if (c<0) return ((int)c+256);
  else     return (c);
}

//--------------------------------------------------------------
//  Permite leer una cadena (sin espacios) sin hacer caso de las
//  teclas de funci�n,se sale con <ENTER> o <ESC> O <CONTROL>+<M>
//  tambien lee la '�' y la '�' y acentos .   (C�mo escribo a�o?)
//
void l_cad (char *p)
{
  char c,i=0, cad[81];

  do
  {
    c=getch();

    if (c=='\0')
    {
      getch();  //tomamos el siguiente caracter (F6='\0'+'@')
    }

    if ((isgraph(c)) || (c=='�') || (c=='�') || (c=='�') || (c=='�')
       || (c=='�') || (c=='�') || (c=='�'))    //NO FUNCIONA: (c=='\165') !!!
    {
      cad[i]=c; i++; putchar(c);
    }

    if (c=='\b')
    {
      putchar('\b'); putchar(' '); putchar('\b'); i--;
    }

  }while ((c!='\r') && (c!='\x1B'));

  cad[i]='\0';
  strcpy(p,cad);
}

codizy.c


Con respecto al algoritmo de encriptación que usé te puede ayudar esta presentación que hice para la universidad: codizy.ppt. En ella explico los vectores de ordenación y codificación que usa el programa. Recientemente me he dado cuenta que mi método de encriptación sufre de una deficiencia importante debido a un problema de periodicidad. Mi idea era que con cada nueva contraseña el algoritmo generara un vector de codificación diferente, entonces, como tenía contraseñas de 9 dígitos de los cuales usaba 6 dígitos para generar el vector de codificación debería tener 10^6 vectores diferentes, pero me he dado cuenta que debido a la periodicidad del algoritmo, cualquier vector de ordenación obtenido con cualquier clave (no importando lo grande que sea esta) queda completamente definido por un número base y un factor de incremento aritmético, entonces, como el número base tiene un rango de {32,33,...,159} y el factor de incremento un rango de {1,2,...,127} el numero total de vectores de codificacion diferentes es de tan sólo: 128 * 127 = 16256, lo cual es mucho menor del millón que yo originalmente pensaba y peor aun, esto no mejora si incremento la longitud de la clave. Lo mismo se puede decir del vector de ordenacion en vez de mil vectores diferentes solo obtengo 110, dandome al final un espacio de claves neto de 1788160 y no de mil millones como yo planeaba. :-( Conclusion: romper este método de encriptación es un paseo para cualquier criptoanalista serio. a mi favor sólo puedo decir que entonces recién estaba comenzando y gracias a esta asignación comenzé a leer acerca del fascinante tema de la criptografia. Además la mayoria de proyectos de mi clase emplearon solamente vectores estáticos de codificación sin considerar siquiera la reordenación. Lo que significa que si tienes el ejecutable lo puedes desensamblar para sacar la tabla de codificación, y si no, le aplicas al mensaje encriptado cualquier método estadistico y comparas la distribución frecuencial de las letras del idioma con la que presenta el mensaje, y si el mensaje es lo suficientemente largo es casi seguro que descubres la tabla de codificación, eso si, algunos proyectos contaban con coloridas interfaces de usuario, cosa que yo obviamente no tenia. ;-) Este programa es bastante limitado y necesitarás un disquet en la unidad A si quieres usarlo (el profesor no quería que escribiéramos nada en su disco duro)


 

Puedes encontrar el proyecto y el ejecutable aqui: codizy.zip. Este pequeño programa es el antecesor de Codi el programa que hice luego en Visual C++ para que corriera bajo Windows.

 

 

Esaú Rodríguez Oscanoa

 


Diseño y coordinación : Esaú Rodriguez Oscanoa - Lima - Per�

Esta página se ve mejor en Mozilla Firefox a 1024x768


Hosted by www.Geocities.ws

1