//-------------------------------------------------------------- // CODIZY.C // Creado: 1998 - Esau R.O. // IDE: Borland C++ 3.1 //-------------------------------------------------------------- // Este programa surge a raiz de un asignacion en la UNFV // del curso de Sistemas de comunicacion. Su objetivo es // encriptar y desencriptar un archivo que se encuentre en [A:] // (yo le agregue la capacidad de partir y reunir archivos) // Actualmente no tiene ninguna utilidad a menos que quieras // transportar archivos a una laptop antigua que solo tenga DOS // con lectora de CD malograda como una vez me sucedi0... // o estes buscando un ejemplo de como se usaban las funciones // fopen(), fclose()... en esos arcanos tiempos ;] // Mi metodo de encriptacion resulto ser muy debil, una vez // que tienes el algoritmo lo rompes en dos patadas pues el // universo de claves resulto mas peque�o de lo que creia debido // a un problema de periodicidad del que no me di cuenta // entonces, ademas aqui lo he probado solo con archivos texto. //-------------------------------------------------------------- // http://www.geocities.com/planeta_dev [[email protected]] //-------------------------------------------------------------- #include "codizy.h" FILE *fpn; char linea[81]; char archivo[81]; char debris[81]; long cod; int ord; int v_cod[128]; int v_ord[NC]; //------------------------------- // FUNCIONES DE PANTALLA // void cuadro(int color) { _cuadro(3,3,77,23,color); } void cuadro1(void) { cuadro(13); _pon(" PROGRAMA CODIFICADOR",27,5,14); _pon("MENU PRINCIPAL",8,8,14); _pon("1: SALIR",8,10,14); _pon("SALE DEL MENU",30,10,12); _pon("2: CREAR",8,11,14); _pon("CREA UN NUEVO ARCHIVO CODIFICADO",30,11,12); _pon("3: LEER",8,12,14); _pon("LEE UN ARCHIVO DECODIFICANDOLO",30,12,12); _pon("4: BORRAR",8,13,14); _pon("ELIMINA UN ARCHIVO DEFINITIVAMENTE",30,13,12); _pon("5: CODIFICAR",8,14,14); _pon("CODIFICA UN ARCHIVO SIN MOSTRARLO",30,14,12); _pon("6: OBSERVAR",8,15,14); _pon("LEE UN ARCHIVO SIN DECODIFICARLO",30,15,12); _pon("7: FRAGMENTAR",8,16,14); _pon("DIVIDE UN ARCHIVO EN OTROS PEQUE�OS",30,16,12); _pon("8: DEFRAGMENTAR",8,17,14);_pon("AGRUPA UN ARCHIVO EN VARIOS",30,17,12); _pon("CERCIORATE DE TENER UN DISKETT EN LA UNIDAD: A",8,21,13+BLINK); _pon("INGRESE NUMERO DE OPCION >",8,19,14); } void cuadro2() { _cuadro(9,9,72,19,12); _pon("EJM: (A:ARCHI.DAT)",19,15,12); _pon("NOMBRE DEL ARCHIVO> ",19,14,11); } //------------------------------- // FUNCIONES CODIFICADORAS // void ordig(int n,int opi,int v[128],int d) { int v_t[128], i, t; if (opi) // (opi==1) ordena v_cod { v_t[0] = v[n-1]; for(i=1;i<n;i++) { v_t[i]=v[(i*(2*d+1))%n-1]; } } else // ordena v_ord { if (d==0) return; v_t[0]=v[n-1]; for(i=1;i<n;i++) { v_t[i]=v[(i*d)%n-1]; } } for(i=0;i<n;i++) { v[i]=v_t[i]; } } long cody(char archivo[81],int op) { int i ,j ,k ,s=0 ,p=0 ,nord ,tord; long l=0L, ncod; char c, cad[NC+1], c_t[NC+1]; FILE *f1, *f2; //------------------------------- ncod=cod; nord=ord; tord=ord; if ((f2=fopen("A:TEMP$$","wb")) == NULL) { _pon("NO SE PUDO CREAR> A:TEMP$$",19,15,13); return(0); } else { if ((f1=fopen(archivo,"rb")) == NULL) { _pon("NO SE PUEDE LEER ARCHIVO",19,15,13); return(0); } else { for(i=0;i<128;i++) v_cod[i]=i+32; for(i=0;i<NC;i++) v_ord[i]=i; do { i=ncod%10; ordig(128,1,v_cod,i); ncod=ncod/10; } while (ncod > 0); do { i=nord%10; ordig(NC,0,v_ord,i); nord=nord/10; } while (nord > 0); do { i=0; do { c=fgetc(f1); cad[i]=c; l++;i++; if (c==EOF) {s=1;break;} } while (i<NC); cad[NC]='\0'; if(s) // No reordenamos la ultima cadena. { for (i=0;i<NC;i++) { c=cad[i]; if (c==EOF) { fputc(c,f2); fclose(f1); fclose(f2); return(l); } else { k = c_i(c); if ((k>31) && (k<160)) //Evitamos tocar '\0' - '\31' { if (op) //debido a tener algunos caracteres { c=v_cod[(k-32+p)%128]; //de control ('\26') } else { for (j=0;j<128;j++) { if (c==(char)v_cod[j]) break; } if (j<p) { c=160+j-p; } else { c=j+32-p; } } } } fputc(c,f2); } } else // Reordenamos la cadena { for (i=0;i<NC;i++) { if (op) { c_t[i]=cad[v_ord[i]]; } else { c_t[v_ord[i]]=cad[i]; } } c_t[NC]=cad[NC]='\0'; // ! strcpy(cad,c_t); tord= tord+(tord/100)+(tord%100)/10+(tord%10); nord=tord%10; ordig(NC,0,v_ord,nord); // Recalculamos v_ord if (tord>10000) { tord=ord; } for (i=0;i<NC;i++) { c=cad[i]; k=c_i(c); if ((k>31) && (k<160)) //Evitamos tocar '\0' - '\31' { if (op) //debido a tener algunos caracteres { c=v_cod[(k-32+p)%128]; //de control ('\26') } else { for (j=0;j<128;j++) { if (c==(char)v_cod[j]) break; } if (j<p) { c=160+j-p; } else { c=j+32-p; } } } fputc(c,f2); } p++; if (p>128) p=0; } } while(1); } } } //------------------------------- // Borrar archivo // void borrar_archivo(char archivo[81],long tam) { long l; if ((fpn = fopen(archivo,"wb")) != NULL) { for (l=0L; l<tam; l++) { fputc('X',fpn); } fclose(fpn); remove(archivo); } } //------------------------------- // Fragmentador // void fragmentar() { long int tam, i, salir=0, p=0; int num_archi=1, dat=0, nch; short int sh; FILE *f1, *f2, *f3; char ch, ch1, *pch, archivodatos[81], archivoini[81]; clrscr(); printf("\n\n -----------------------------------------------------"); printf("\n INGRESE EL CAMINO Y NOMBRE DEL ARCHIVO A FRAGMENTARSE\n : "); l_cad(archivo); if ((f1=fopen(archivo,"rb"))==NULL) { printf("\n NO SE PUDO ABRIR ARCHIVO %s\n <PRESIONA CUALQUIER TECLA> ",archivo); getch(); return; } else { strcpy(archivoini,archivo); pch=strchr(archivo,'.'); if(pch!=NULL) *pch='\0'; strcat(archivo,".$$$"); strcpy(archivodatos,archivo); if ((f3=fopen(archivodatos,"wb"))==NULL) { printf("\n NO SE PUDO ABRIR ARCHIVO %s\n <NO SE GUARDARAN LOS NOMBRES DE LOS ARCHIVOS FRAGMENTADOS> ",archivodatos); getch(); return; } else { dat=1; strcpy(archivodatos,archivo); fprintf(f3,"ARCHIVO ORIGEN>>%s\nHACIA:\n",archivoini); } do { do { printf("\n INGRESA EL NOMBRE DEL ARCHIVO DESTINO NUMERO: %d\n : ",num_archi); l_cad(archivo); if ((f2=fopen(archivo,"wb"))==NULL) { printf("\n NO SE PUDO CREAR ARCHIVO %s",archivo); printf("\n REINTENTAR? (S/N) : "); ch=getche(); if (ch=='S'||ch=='s') continue; else { fclose(f1); if (dat) fclose(f3); return; } } else break; }while(ch=='s'||ch=='S'); printf("\n INGRESA EL TAMA�O DEL ARCHIVO (EN KBYTES)\n : "); l_cad(linea); tam=atol(linea); printf("\n QUIERES GUARDAR EL ARCHIVO : ""%s"" DE %ld KBYTES? (S/N): ",archivo,tam); ch=getche(); if (ch=='n'||ch=='N') { fclose(f1); fclose(f2); if(dat) fclose(f3); return; } tam*=1000L; for(i=0;i<tam;i++) { nch=fgetc(f1); //Lee un caracter del archivo p++; //numero de caracteres leidos if(feof(f1)) { salir=1; break; } fputc(nch,f2); } fclose(f2); fprintf(f3,"ARCHIVO NUMERO:%d\nNOMBRE>>%s\n",num_archi,archivo); num_archi++; }while(!salir); printf("\n LA FRAGMENTACION SE HA LLEVADO A CABO\n"); if (dat) printf(" ARCHIVO DE AYUDA:%s\n <PULSE ENTER>",archivodatos); fclose(f3); fclose(f1); getch(); } } //------------------------------- // Defragmentador // void defragmentar() { long int tam, i, salir=0, p=0; int num_archi=1, nch; short int sh; FILE *f1, *f2; char ch, ch1, *pch, archivodatos[81], archivoini[81]; clrscr(); printf("\n\n -----------------------------------------------------"); printf("\n INGRESE NOMBRE DEL ARCHIVO QUE SE FORMARA\n : "); l_cad(archivo); if ((f1=fopen(archivo,"wb"))==NULL) { printf("\n NO SE PUDO CREAR ARCHIVO %s\n <PRESIONA CUALQUIER TECLA> ",archivo); getch(); return; } else { do { do { printf("\n INGRESA EL NOMBRE DEL ARCHIVO ORIGEN NUMERO: %d\n : ",num_archi); l_cad(archivo); if(!strcmp(archivo,"<fin>")) { fclose(f1); return; } if ((f2=fopen(archivo,"rb"))==NULL) { printf("\n NO SE PUDO LEER ARCHIVO %s",archivo); printf("\n REINTENTAR? (S/N) : "); ch=getche(); if (ch=='S'||ch=='s') continue; else { fclose(f1); return; } } else break; }while(ch=='s'||ch=='S'); do { nch=fgetc(f2); //Lee un caracter del archivo p++; //numero de caracteres leidos if(feof(f2)) { break; } fputc(nch, f1); }while(nch!=EOF); fclose(f2); num_archi++; }while(!salir); printf("\n LA DEFRAGMENTACION SE HA LLEVADO A CABO\n"); fclose(f1); getch(); } } //------------------------------- //FUNCIONES DEL MENU // void crear() { long l; strcpy(archivo,""); cuadro2(); gotoxy(40,14); l_cad(archivo); gotoxy(40,14); if ((fpn=fopen(archivo,"wt"))==NULL) { _pon("NO SE PUDO CREAR ARCHIVO",19,15,12); getch(); return; } else { clrscr(); _pon(" A CONTINUACION ESCRIBE EL MENSAJE",3,3,11); _pon(" (ESCRIBE: <FIN> PARA TERMINAR)",3,4,12); _pon(" -----------------------------------------------------------------------",3,5,12); putchar('\n'); while(1) { printf(" "); gets(linea); fprintf(fpn,"%s\n",linea); if (strcmpi(linea,"<FIN>")==0) { break; } } puts("\n EL ARCHIVO ESTA HECHO"); gotoxy(5,wherey()-1); fclose(fpn); l=cody(archivo,1); printf("\n SE HAN CODIFICADO: %ld CARACTERES",l); printf("\n PRESIONA <ENTER>"); borrar_archivo(archivo,l); rename("A:TEMP$$",archivo); getch(); } } void leer() { char c; char archivo_guardado[81]; int i=1;long l; strcpy(archivo,""); cuadro2(); gotoxy(40,14); l_cad(archivo); gotoxy(40,14); if ((fpn=fopen(archivo,"rt"))==NULL) { _pon("NO SE PUDO ABRIR EL ARCHIVO.",19,15,13); getch(); return; } else { fclose(fpn); if ((l=cody(archivo,0)) != 0) { if ((fpn=fopen("A:TEMP$$","rt"))==NULL) { _pon("NO SE PUDO ABRIR EL ARCHIVO TEMPORAL.",19,15,13); getch(); return; } do { clrscr(); _pon(" A CONTINUACION SE DA EL MENSAJE",3,3,14); _pon(" ----------------------------------------------------------------------",3,4,12); textcolor(15); putchar('\n'); c='s'; while (c=='s'||c=='S') { cprintf(" ");i++; if (fgets(linea,81,fpn) == NULL) { goto SALIR; } cprintf("%s\r",linea); if (strcmpi (linea,"<FIN>\n") == 0) { goto SALIR; } if ((i % 17) == 0) { _pon("�QUIERES SEGUIR? (S/N) ",27,24,7); c = getche(); if (c=='N'||c=='n') { goto SALIR; } else { i = 17; break; } } } } while (1); SALIR: _pon("FINAL DEL ARCHIVO. PRESIONA CUALQUIER TECLA.",18,24,7); getch(); cuadro2(); _pon(" ",19,15,14); _pon("�QUIERES GUARDAR ESTE ARCHIVO EN EL DISKETT? (S/N)> ",15,14,14); c=getche(); if (c=='s'||c=='S') { _pon("�CON QUE NOMBRE? (A:ARCHI:TXT) >> ",15,15,14); l_cad(archivo_guardado); gotoxy(15,15); fclose(fpn); i = rename("A:TEMP$$.",archivo_guardado); if (i == 0) { _pon("SE HA GUARDADO EL ARCHIVO: ",15,16,14); puts(archivo_guardado);gotoxy(42,16); getch(); } else { _pon("NOMBRE NO VALIDO. NO SE GUARDO EL ARCHIVO",15,16,15); borrar_archivo("A:TEMP$$",l); getch(); } } else { _pon("PRESIONA CUALQUIER TECLA.",15,15,15); gotoxy(15,14); fclose(fpn); borrar_archivo("A:TEMP$$",l); getch(); } } } } void borrar() { char c;long l=0L; strcpy(archivo,""); _cuadro(9,9,72,19,12); _pon("NOMBRE DEL ARCHIVO>",19,12,11); gotoxy(40,12); l_cad(archivo); _pon("ESTAS SEGURO QUE QUIERES BORRAR: ",19,13,12); _pon(archivo,19,14,15); _pon("(S/N)>> ",19,15,12); c=getche(); if (c=='S') { if ((fpn = fopen(archivo,"rb")) == NULL) { _pon("NO SE PUDO ABRIR DICHO ARCHIVO.",19,16,13); getch(); return ; } else { while ((c = fgetc(fpn)) != EOF ) { l++ ; } fclose(fpn); puts(" SE BORRARA EL ARCHIVO."); _pon("NUMERO DE CARACTERES A BORRARSE: ",19,16,12) ; printf("%ld",l); _pon("�ESTAS SEGURO DE HACERLO? (S/N)>>",19,17,13); c=getche(); if (c=='S') { borrar_archivo(archivo,l); _pon("ARCHIVO BORRADO.",19,18,13); getch(); } else { _pon("NO SE HA BORRADO NINGUN ARCHIVO.",19,18,13); getch(); } } } else { _pon("NO SE BORRARA NINGUN ARCHIVO.",19,16,13); getch(); } } void codificar() { long l; int n, b; char archivo2[81]; strcpy(archivo,""); cuadro2(); gotoxy(40,14); l_cad(archivo); gotoxy(40,14); if ((fpn = fopen(archivo,"rb")) == NULL) { _pon("NO SE PUDO LEER ARCHIVO",19,15,12); getch();return; } else { fclose(fpn); l=cody(archivo,1); _pon("SE HAN CODIFICADO: ",19,15,13);printf("%ld CARACTERES",l); do { n=0; _pon("NOMBRE DEL ARCHIVO DE DESTINO: ",19,16,12); _pon(" ",19,17,12); _pon("PARA SALIR: <x>",19,18,12); gotoxy(19,17); l_cad(archivo2); if (!strcmpi ("x",archivo2)) { n=1;break; } b=rename("A:TEMP$$",archivo2); } while( b!=0 ); _pon("PRESIONA CUALQUIER TECLA.",19,18,12); if (n==1) { remove("A:TEMP$$"); } getch(); } } void observar() { int i, j, pg=0; char c ; strcpy(archivo,""); cuadro2(); gotoxy(40,14); l_cad(archivo); gotoxy(40,14); if ((fpn = fopen(archivo,"rb")) == NULL) { _pon("NO SE PUDO ABRIR EL ARCHIVO.",19,15,13); getch(); return; } else { do { clrscr(); pg++; for (i=0; i<15; i++) { printf("\n\n ESTA ES LA RELACION DE CARACTERES EN EL ARCHIVO> %s\n",archivo); printf(" ---------------------PAGINA : %d ---------------\n\n ",pg); for (j=0; j<75; j++) { c=fgetc(fpn); putchar(c); if (c == '\n') {i++;printf(" ");j=0;} if (c == EOF) break; if (i > 14) break; } if (c == EOF) { printf("\n FINAL. PRESIONE CUALQUIER TECLA."); getch(); return; } printf("\n "); } printf("\n\n �SEGUIR? (S/N)"); c=getche(); } while ( (c=='s')||(c=='S') ); fclose(fpn); printf(" PRESIONE CUALQUIER TECLA."); getch(); } } int caratula() { int i; long l; cuadro(LIGHTGREEN); for (i=1; i<12; i++) _pon("PROGRAMA CODIFICADOR",30,4+i,GREEN+BLINK); _pon("PROGRAMA CODIFICADOR",30,16,YELLOW); _pon("INGRESE CODIGO :",25,18,14); while(1) { _pon(" ",44,18,10); gotoxy(44,18); l_cad(linea); if (strlen(linea) <= 9) { if ((l = atol(linea)) != 0) { if ((cod = l/1000) >= 100000) { if ((ord = l % 1000) >= 100) { _pon("TU CODIGO HA SIDO ACEPTADO!!",25,19,LIGHTGREEN); _pon("PRESIONA CUALQUIER TECLA.",25,20,RED); getch(); gotoxy(44,18); return(1); } } } } _pon("EL CODIGO NO ES VALIDO!!",25,19,LIGHTRED); _pon("(NUMERO DE NUEVE CIFRAS)",25,20,LIGHTRED); } } //------------------------------- // FUNCION PRINCIPAL // void main() { int c=0; if (caratula()) { while (1) { cuadro1(); do { _pon(" ",34,19,10); gotoxy(34,19); l_cad(linea); if (strlen (linea) > 2) { c=0; continue; } c = atoi(linea); } while ((c < 1) || (c > 8)); gotoxy(34,19); switch(c) { case 1:exit(1); break; case 2:crear(); break; case 3:leer(); break; case 4:borrar(); break; case 5:codificar(); break; case 6:observar(); break; case 7:fragmentar(); break; case 8:defragmentar(); break; } } } } |