Hack x Crack - Comunidad de Seguridad informática

Programación => C / C++ => Mensaje iniciado por: C_printfer en Agosto 10, 2014, 03:44:25 pm

Título: [Funcionando] Cifrador-descifrador de archivos en C
Publicado por: C_printfer en Agosto 10, 2014, 03:44:25 pm
 ;D ;D ;D

Hola a todos!

Se me ocurrió la idea de hacer un cifrador descifrador de archivos, ya sean imágenes, ficheros de texto, o cualquier cosa. La idea es hacerlo en C o Java, ya que son los lenguajes más comunes y que más gente conoce. Si se decide hacerlo en Java, incluso podríamos crearle una interfaz gráfica a la aplicación y dejarla bonita jejeje.  :P :P Además, podría servir para el proyecto del IRC, ya que podrán utilizar este cifrado para cifrar las comunicaciones.

Hemos de tener en cuenta que tenemos que utilizar un algoritmo de cifrado que permita el descifrado a partir de, simplemente, el texto cifrado. Es decir, las operaciones de cifrar y descifrar deben ser inversas. Para probar el programa simplemente podemos crearnos un fichero .txt y escribir en el mismo cualquier cosa, y cuando luego abramos el fichero con el texto cifrado que nos crea nuestro programa, veremos la diferencia. También podemos probar con una imagen o cualquier cosa. Quizás, más que tomar esto como un proyecto, es un código que os doy ya hecho para que cada uno aplique simplemente el algoritmo de cifrado que quiera. Yo os pongo un ejemplo (muy vago) en el código que os adjunto. Pero creo que podemos hacer algo interesante entre varios, y añadir funcionalidades al programa.

Bueno, simplemente quedo a la espera de vuestra respuesta y de que se presente algún voluntario.

Os dejo la base del programa hecha en C, queda hacer el algoritmo de cifrado (no hay problema en pasarlo a Java si preferís):

Código: C
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. char cifrar(char *, int);
  5.  
  6. int main()
  7. {
  8.         char *texto=NULL; //texto a cifrar. Al no declararlo como array, no nos tenemos que preocupar del tamanyo del texto que vamos a cifrar
  9.         int ch; //variable temporal para leer cada caracter o EOF
  10.         char nombre[25]; //nombre que le vamos a dar al fichero de texto en el que se va a guardar el texto cifrado
  11.         FILE *pf; //puntero de tipo FILE, necesario para manejar ficheros
  12.         int i, numerocaracteres = 0, tamanyo;
  13.         char textocifrado; //variable que contendra el caracter resultante del cifrado. Si el algoritmo de cifrado que hagamos lo requiere, se puede declarar como un array
  14.  
  15.         printf("            CIFRADOR DE ARCHIVOS!!!\n\n");
  16.         printf("Introduce el nombre del archivo que se va a cifrar\n");
  17.         printf("(Debe darse segun nombre.extension)\n");
  18.         printf("El archivo a cifrar debe estar localizado en el mismo\n");
  19.         printf("directorio que este programa\n");
  20.         scanf("%s", &nombre);
  21.         getchar();
  22.  
  23.         pf = fopen(nombre, "r"); //si el fichero no existe, se produce error de apertura, o lo que es lo mismo, no hay nada que descifrar
  24.  
  25.         //comprobamos que no haya errores al abrir el fichero
  26.         if (pf == NULL)
  27.         {
  28.                 printf("No se encuentra un fichero con ese nombre.\n");
  29.                 printf("Pulsa Enter para salir\n");
  30.                 getchar();
  31.                 return -1;
  32.         }
  33.  
  34.         //CONTAMOS EL NUMERO DE CARACTERES DEL TEXTO A CIFRAR PARA VER SU TAMANYO
  35.         ch = fgetc(pf);
  36.         for (i = 0; ch != EOF; i++)
  37.         {
  38.                 numerocaracteres ++;
  39.                 ch = fgetc(pf);
  40.         }
  41.  
  42.         tamanyo = sizeof(char)*numerocaracteres;
  43.         texto = (char *)malloc(sizeof(tamanyo));
  44.  
  45.         if (texto == NULL)
  46.         {
  47.                 printf("Error, insuficiente espacio de memoria\n");
  48.                 printf("Enter para salir\n");
  49.                 getchar();
  50.                 return -1;
  51.         }
  52.  
  53.         rewind(pf);
  54.  
  55.         for (i = 0; i<numerocaracteres; i++)
  56.         {
  57.                 texto[i] = ch;
  58.                 ch = fgetc(pf);
  59.         }
  60.  
  61.         fclose(pf);
  62.  
  63.         printf("Que nombre doy al archivo cifrado?\n");
  64.         printf("(Debe darse segun nombre.extension)\n");
  65.         scanf("%s", &nombre);
  66.         getchar();
  67.  
  68.         pf = fopen(nombre, "w"); //abrir un archivo para escritura, se crea si no existe o se sobreescribe si existe
  69.  
  70.         //comprobamos que no haya errores al abrir el fichero
  71.         if (pf == NULL)
  72.         {
  73.                 printf("Error al crear el fichero. Pulsa Enter para salir\n");
  74.                 getchar();
  75.                 return -1;
  76.         }
  77.  
  78.         i = 0;
  79.         while (i<numerocaracteres && ferror(pf) == 0) //respectivamente, mientras que no lleguemos al final del texto y no haya error
  80.         {
  81.                 textocifrado = cifrar(texto, i);
  82.                 fputc(textocifrado, pf);
  83.                 i++;
  84.         }
  85.  
  86.         printf("El texto se ha cifrado correctamente!\n");
  87.  
  88.         fclose(pf);
  89.  
  90.         //liberamos memoria
  91.         //free(texto);
  92.  
  93.         printf("               Programado en C por hackXcrack\n");
  94.         printf("Enter para salir del programa\n");
  95.  
  96.         getchar();
  97.         return 0;
  98. }
  99.  
  100. char cifrar(char *texto, int i) //ESTO ES LO QUE HAY QUE REALIZAR
  101. {
  102.         char textocifrado;
  103.  
  104.         textocifrado = texto[i] /* COMPLETAR */;
  105.  
  106.         return textocifrado;
  107. }

La línea del free, para liberar memoria, la he comentado porque me da error y llevo un buen rato y no sé el motivo. Por favor, si alguien lo sabe o lo prueba y no le da error que lo diga.

Saludos.
Título: Re:Cifrador-descifrador (C o Java)
Publicado por: noopynoob en Agosto 10, 2014, 06:17:46 pm
Hola, ¿exactamente que problema tienes? lo que puedo decir es que el problema radica en el tamaño del fichero, es decir, compile el programa y pude cifrar ficheros menores de 8 bytes sin ningún problema, pero cuando pasa de ese tamaño el programa crashea, eran .txt que podían tener hasta 8 caracteres, intente modificar el código pero luego me daba otros problemas quizás alguien pueda solucionarlo.
Título: Re:Cifrador-descifrador (C o Java)
Publicado por: Krakakanok en Agosto 10, 2014, 06:28:39 pm
noopynoob la idea de esta sección es la de proponer ideas para proyectos del foro y que los miembros de HxC que quieran hacer con el proyecto lo digan. C_printfer solo propone una base por la que empezar el proyecto que ha propuesto.

Saludos.
Título: Re:Cifrador-descifrador (C o Java)
Publicado por: C_printfer en Agosto 11, 2014, 12:22:06 am
Noopynoob, no sabes cuanto me alegra tenerte de vuelta amigo!! Te echaba de menos  :D

Gracias por la aclaración Kraka  ;)

Porfis Noopynoob aclárame eso de los 8 bytes, que no te sigo... Yo he probado el programa con textos de más de 8 caracteres y no da ningún problema. Además, ¿qué lógica tendría que eso fallase para textos mayores de 8 bytes? Mi problema es que me da error al liberar la memoria, en el free, no sé a qué te refieres tú. Y lo raro es que antes el free iba perfecto, ha empezado a fallar a partir de unas modificaciones que he hecho en el código (y no veo el motivo).

Saludos.
Título: Re:Cifrador-descifrador (C o Java)
Publicado por: noopynoob en Agosto 11, 2014, 09:21:48 pm
Pues si jeje, estaba ocupado y tuve que alejarme un poco de esto, pues mi carrera no tiene nada que ver con esto, en fin, me alegro de volver con ustedes.

Pues así es, cuando quiero encriptar un texto donde haya más de 8 caracteres me dice program.exe dejó de funcionar y luego se cierra, ¿que lógica tiene? eso me pregunto yo, no entiendo que esta fallando, saludos.
Título: Re:Cifrador-descifrador (C o Java)
Publicado por: bum3r en Agosto 11, 2014, 09:36:02 pm
Pues si jeje, estaba ocupado y tuve que alejarme un poco de esto, pues mi carrera no tiene nada que ver con esto, en fin, me alegro de volver con ustedes.

Pues así es, cuando quiero encriptar un texto donde haya más de 8 caracteres me dice program.exe dejó de funcionar y luego se cierra, ¿que lógica tiene? eso me pregunto yo, no entiendo que esta fallando, saludos.

Creo que es la linea 43 :               
Código: C
  1. texto = (char *)malloc(sizeof(tamanyo));
Habria que sacarle el sizeof :       
Código: C
  1. texto = (char *)malloc(tamanyo);

Ademas habria que invertir las lineas 57 y 58, sino texto[0] agarra basura.
Código: C
  1. texto[i] = ch;  //primer vuelta del  bucle texto[0] = 'BASURA'
  2. ch = fgetc(pf);
Quedaria asi :
Código: C
  1. ch = fgetc(pf);
  2. texto[i] = ch;
Saludos.
Título: Re:Cifrador-descifrador (C o Java)
Publicado por: C_printfer en Agosto 11, 2014, 10:48:30 pm
Noopynoob ya sé que de momento esto no tiene lógica. Bum3r tienes razón, es que anduve trasteando con los for y la lié parda en el segundo. Ahora entiendo por qué me imprmía unos caracteres en chino el programa cuando estuve trasteando con la función de cifrar jajaja, por eso no llegué a poner lo que tenía hecho, creí que había algo mal  ??? ??? ??? ??? El segundo for tiene que quedar así (creo)  ::) ::) ::) ::) ::) ::) ::) :
Código: C
  1.         rewind(pf);
  2.  
  3.         for (i = 0; i<numerocaracteres; i++)
  4.         {
  5.                 ch = fgetc(pf);
  6.                 texto[i] = ch;
  7.         }
  8.  
  9.         fclose(pf);

No obstante, me sigue fastidiando el free. Y no entiendo por qué.
Odio dejar las cosas incompletas así que lo pensaré hasta que salga.

Gracias muchas por la ayudita!
Título: Re:Cifrador-descifrador (C o Java)
Publicado por: bum3r en Agosto 11, 2014, 11:55:14 pm
Perdon que moleste de nuevo jeje, crei que ya lo habias solucionado a lo del free con el codigo que te pase, mira..

Cambia estas lineas :
Código: C
  1. tamanyo = sizeof(char)*numerocaracteres;
  2. texto = (char *)malloc(sizeof(tamanyo));

Por esta
Código: C
  1. texto = (char *)malloc(sizeof(char)*numerocaracteres);

El problema esta en que estas usando sizeof dos veces. Saludos
Título: Re:Cifrador-descifrador (C o Java)
Publicado por: C_printfer en Agosto 12, 2014, 02:06:16 am
Bum3r tienes razón otra vez, gracias. Era eso lo que fallaba. No veas lo que cuesta detectar esos fallos tontos... como se camuflan los muy ______.  :D Te todas formas, no hacía falta al final ni malloc, ni free ni nada de nada, que bien que me he dado cuenta y se ha simplificado el código.

Por tanto, abajo os pego ya el cifrador y el descifrador funcionando.

Hay que dejar claro que en criptografía no está bien visto el hecho de que la seguridad de un algoritmo de cifrado venga dada porque dicho algoritmo es secreto. Por tanto, como simplemente por el hecho de publicar aquí el algoritmo ya es público, y todo el mundo puede atacarlo, basta con modificar los valores que están sumando y restando en la función de cifrar y añadir algún if o lo que se os ocurra para que solamente vosotros podáis cifrar y descifrar vuestros secretos jejeje. Se podría modificar el código para que pidiese por teclado una clave, de ese modo, la clave ya sería pública, pero lo malo es que habría que recordar esa clave para el descifrado, si no, no podremos descifrar. No sé si me explico bien.

No soy ningún experto ni mucho menos en ningún tema, tampoco en criptografía, pero creo que este algoritmo no se puede atacar mediante los ataques existentes sobre textos cifrados. Además, si os fijáis en el código, parece imposible (en mi opinión) descifrar el texto sin conocer la clave. No obstante, la idea original era hacer algún algoritmo de cifrado chulo entre varios, de modo que podamos ver posibles puntos débiles del algoritmo de cifrado. Puede que en este algoritmo que se me ha ocurrido sea una basura y haya algo que permita que alguien lo ataque, pero por eso digo, cuantos más ojos lo miren, mejor.


CIFRADOR
Código: C
  1. //Programa realizado por Hack x Crack
  2.  
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5.  
  6. char cifrar(char, int);
  7.  
  8. int main()
  9. {
  10.         char texto; //texto a cifrar. Al no declararlo como array, no nos tenemos que preocupar del tamanyo del texto que vamos a cifrar
  11.         int ch; //variable temporal para leer cada caracter o EOF
  12.         char nombre[25]; //nombre que le vamos a dar al fichero de texto en el que se va a guardar el texto cifrado
  13.         FILE *pf, *pf2; //puntero de tipo FILE, necesario para manejar ficheros
  14.         int i;
  15.         char textocifrado; //variable que contendra el caracter resultante del cifrado
  16.  
  17.         printf("            CIFRADOR DE ARCHIVOS!!!\n\n");
  18.         printf("Introduce el nombre del archivo que se va a cifrar\n");
  19.         printf("(Debe darse segun nombre.extension)\n");
  20.         printf("El archivo a cifrar debe estar localizado en el mismo\n");
  21.         printf("directorio que este programa\n");
  22.         scanf("%s", &nombre);
  23.         getchar();
  24.  
  25.         pf = fopen(nombre, "r"); //si el fichero no existe, se produce error de apertura, o lo que es lo mismo, no hay nada que cifrar
  26.  
  27.         printf("Que nombre doy al archivo cifrado?\n");
  28.         printf("(Debe darse segun nombre.extension)\n");
  29.         scanf("%s", &nombre);
  30.         getchar();
  31.         pf2 = fopen(nombre, "w"); //abrir un archivo para escritura, se crea si no existe o se sobreescribe si existe
  32.  
  33.         //comprobamos que no haya errores al abrir el fichero
  34.         if (pf == NULL)
  35.         {
  36.                 printf("No se encuentra un fichero con ese nombre.\n");
  37.                 printf("Pulsa Enter para salir\n");
  38.                 getchar();
  39.                 return -1;
  40.         }
  41.  
  42.         //comprobamos que no haya errores al abrir el fichero
  43.         if (pf2 == NULL)
  44.         {
  45.                 printf("Error al crear el fichero. Pulsa Enter para salir\n");
  46.                 getchar();
  47.                 return -1;
  48.         }
  49.  
  50.         ch = fgetc(pf);
  51.         for (i = 0; ch != EOF; i++)
  52.         {
  53.                 texto = ch;
  54.                 textocifrado = cifrar(texto, i);
  55.                 fputc(textocifrado, pf2);
  56.                 ch = fgetc(pf);
  57.  
  58.                 if (i > 213490)
  59.                         i = 0;
  60.         }
  61.  
  62.         fclose(pf);
  63.         fclose(pf2);
  64.  
  65.         printf("El archivo se ha cifrado correctamente!\n");
  66.  
  67.         printf("               Programado en C por Hack x Crack\n");
  68.         printf("Enter para salir del programa\n");
  69.  
  70.         getchar();
  71.         return 0;
  72. }
  73.  
  74. char cifrar(char texto, int i)
  75. {
  76.         //Algoritmo ideado por C_printfer
  77.         char textocifrado;
  78.  
  79.         if (i <= 52) //no comprobamos si el valor de i es mayor o igual que 0 porque obviamente siempre lo va a ser
  80.                 textocifrado = texto + (i + 1);
  81.         else if (i >= 52 && i <= 79)
  82.                 textocifrado = texto - (i + 3);
  83.         else if (i >= 80 && i <= 111)
  84.                 textocifrado = texto + ((i / 2) - 7);
  85.         else if (i >= 112 && i <= 170)
  86.                 textocifrado = texto - (i / 2);
  87.         else if (i >= 171 && i <= 8457)
  88.                 textocifrado = texto - ((i / 3) + 1);
  89.         else if (i >= 8458 && i <= 21349)
  90.                 textocifrado = texto + ((i / 3) + 1);
  91.         else
  92.                 textocifrado = texto - 132;
  93.  
  94.         //ahora damos otra pasada para hacer aun mas dificil la obtencion del texto en claro a partir del texto cifrado,
  95.         //se trata de despistar al enemigo jejeje :D
  96.         if (((i * 3) % 4) == 1)
  97.                 textocifrado = texto - 1;
  98.         if ((i / 5) == 2)
  99.                 textocifrado = texto + (3 * i);
  100.         if (((i + 1) / 2) == 3)
  101.                 textocifrado = texto;
  102.         if (((i - 4) % 10) == 0)
  103.                 textocifrado = texto + (2 - i);
  104.         if (((i - 4) % 10) == 6)
  105.                 textocifrado = texto - 2;
  106.  
  107.         return textocifrado;
  108. }
  109.  
  110. //Cualquier critica, sugerencia, idea, ayuda, etc., sera bien recibida



DESCIFRADOR
Código: C
  1. //Programa realizado por Hack x Crack
  2.  
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5.  
  6. //Programa realizado por Hack x Crack
  7.  
  8. #include<stdio.h>
  9. #include<stdlib.h>
  10.  
  11. char descifrar(char, int);
  12.  
  13. int main()
  14. {
  15.         char texto; //texto a descifrar. Al no declararlo como array, no nos tenemos que preocupar del tamanyo del texto que vamos a descifrar
  16.         int ch; //variable temporal para leer cada caracter o EOF
  17.         char nombre[25]; //nombre que le vamos a dar al fichero de texto en el que se va a guardar el texto descifrado
  18.         FILE *pf, *pf2; //puntero de tipo FILE, necesario para manejar ficheros
  19.         int i;
  20.         char textodescifrado; //variable que contendra el caracter resultante del descifrado
  21.  
  22.         printf("            DESCIFRADOR DE ARCHIVOS!!!\n\n");
  23.         printf("Introduce el nombre del archivo que se va a descifrar\n");
  24.         printf("(Debe darse segun nombre.extension)\n");
  25.         printf("El archivo a descifrar debe estar localizado en el mismo\n");
  26.         printf("directorio que este programa\n");
  27.         scanf("%s", &nombre);
  28.         getchar();
  29.  
  30.         pf = fopen(nombre, "r"); //si el fichero no existe, se produce error de apertura, o lo que es lo mismo, no hay nada que descifrar
  31.  
  32.         printf("Que nombre doy al archivo descifrado?\n");
  33.         printf("(Debe darse segun nombre.extension)\n");
  34.         scanf("%s", &nombre);
  35.         getchar();
  36.         pf2 = fopen(nombre, "w"); //abrir un archivo para escritura, se crea si no existe o se sobreescribe si existe
  37.  
  38.         //comprobamos que no haya errores al abrir el fichero
  39.         if (pf == NULL)
  40.         {
  41.                 printf("No se encuentra un fichero con ese nombre.\n");
  42.                 printf("Pulsa Enter para salir\n");
  43.                 getchar();
  44.                 return -1;
  45.         }
  46.  
  47.         //comprobamos que no haya errores al abrir el fichero
  48.         if (pf2 == NULL)
  49.         {
  50.                 printf("Error al crear el fichero. Pulsa Enter para salir\n");
  51.                 getchar();
  52.                 return -1;
  53.         }
  54.  
  55.         ch = fgetc(pf);
  56.         for (i = 0; ch != EOF; i++)
  57.         {
  58.                 texto = ch;
  59.                 textodescifrado = descifrar(texto, i);
  60.                 fputc(textodescifrado, pf2);
  61.                 ch = fgetc(pf);
  62.  
  63.                 //evitamos que se desborde la i si ciframos archivos tremendamente grandes,
  64.                 //ademas asi volvemos a iniciar el algoritmo de cifrado
  65.                 if (i > 213490)
  66.                         i = 0;
  67.         }
  68.  
  69.         fclose(pf);
  70.         fclose(pf2);
  71.  
  72.         printf("El archivo se ha descifrado correctamente!\n");
  73.  
  74.         printf("               Programado en C por Hack x Crack\n");
  75.         printf("Enter para salir del programa\n");
  76.  
  77.         getchar();
  78.         return 0;
  79. }
  80.  
  81. char descifrar(char texto, int i)
  82. {
  83.         //Algoritmo ideado por C_printfer
  84.         char textodescifrado;
  85.  
  86.         if (i <= 52)
  87.                 textodescifrado = texto - (i + 1);
  88.         else if (i >= 52 && i <= 79)
  89.                 textodescifrado = texto + (i + 3);
  90.         else if (i >= 80 && i <= 111)
  91.                 textodescifrado = texto - ((i / 2) - 7);
  92.         else if (i >= 112 && i <= 170)
  93.                 textodescifrado = texto + (i / 2);
  94.         else if (i >= 171 && i <= 8457)
  95.                 textodescifrado = texto + ((i / 3) + 1);
  96.         else if (i >= 8458 && i <= 21349)
  97.                 textodescifrado = texto - ((i / 3) + 1);
  98.         else
  99.                 textodescifrado = texto + 132;
  100.  
  101.         if (((i * 3) % 4) == 1)
  102.                 textodescifrado = texto + 1;
  103.         if ((i / 5) == 2)
  104.                 textodescifrado = texto - (3 * i);
  105.         if (((i + 1) / 2) == 3)
  106.                 textodescifrado = texto;
  107.         if (((i - 4) % 10) == 0)
  108.                 textodescifrado = texto - (2 - i);
  109.         if (((i - 4) % 10) == 6)
  110.                 textodescifrado = texto + 2;
  111.  
  112.         return textodescifrado;
  113. }
  114.  
  115. //Cualquier critica, sugerencia, idea, ayuda, etc., sera bien recibida


Espero que os guste y le encontréis utilidad.
Será de agradecer toda crítica constructiva, sugerencia...

Saludos.
Título: Re:[Funcionando] Cifrador-descifrador de archivos en C
Publicado por: stakewinner00 en Agosto 12, 2014, 02:16:49 am
El cifrador no me compila en la línea 6 "char cifrar(char *, int);"  es un puntero, pero en la 71 no "char cifrar(char texto, int i)"
entonces bastaría con cambiar la linea 6 a char
Título: Re:[Funcionando] Cifrador-descifrador de archivos en C
Publicado por: bum3r en Agosto 12, 2014, 04:54:13 am
Te quedo exelente. :D
Buena propuesta, ya le estoy agregando mas pasadas jeje y algo para liarlo mas XD...
Buen trabajo!! ;), Saludos.
Título: Re:[Funcionando] Cifrador-descifrador de archivos en C
Publicado por: C_printfer en Agosto 12, 2014, 10:10:34 am
Lo sé Stake, justo es lo que te acabo de comentar por privado, voy a editar ahora mismo los codes que puse para mejorar unas cositas muy puntuales. De todas formas, a mí sí me compila, aunque me he dado cuenta que hay compiladores que tragan unas cosas y otros no.

Gracias Bum3r, perfecto, tú prueba y mejora. Aunque echa un ojo si quieres a la pequeña modificación que he hecho, en el for.

Lo que se podría hacer es un solo code, que lo primero que haga sea preguntar si se desea cifrar o descifrar, para evitar tener dos programas distintos. Pero bueno... no es necesario, aunque lo podemos hacer si queréis.

S2!
Título: Re:[Funcionando] Cifrador-descifrador de archivos en C
Publicado por: bum3r en Agosto 12, 2014, 07:27:33 pm
Este es el code para descifrar y cifrar en el mismo prog es un ejemplo lo hice al tiro pero funciona ;D
Código: C
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. char cifrar(char , int);
  5. char descifrar(char , int);
  6.  
  7.  
  8. void ingresoCifrar(char *,char *);
  9. void ingresoDescifrar(char *,char *);
  10.  
  11. int main()
  12. {      
  13.         char texto; //texto a cifrar. Al no declararlo como array, no nos tenemos que preocupar del tamanyo del texto que vamos a cifrar
  14.         int ch; //variable temporal para leer cada caracter o EOF
  15.         char nombre[25]; //nombre que le vamos a dar al fichero de texto en el que se va a guardar el texto cifrado
  16.         char nombre2[25]; //nombre que le vamos a dar al otro fichero de texto en el que se va a guardar el texto cifrado
  17. FILE *pf, *pf2; //puntero de tipo FILE, necesario para manejar ficheros
  18.         int i;
  19.         char textocifrado; //variable que contendra el caracter resultante del cifrado
  20.         char textodescifrado; //variable que contendra el caracter resultante del descifrado
  21.         int opcion=0;
  22.  
  23.         printf("*****Elija opcion*****\n1- Cifrador\n2- Descifrador\n\t\t:");
  24.         scanf("%i",&opcion);
  25.         getchar();
  26.        
  27.  
  28.         switch(opcion)
  29.         {
  30.                 case 1:
  31.  
  32.                         ingresoCifrar(nombre,nombre2);
  33.  
  34.                         if((pf = fopen(nombre, "r"))==NULL) //si no existe, salimos
  35.                         {
  36.                                 printf("No se encuentra un fichero con ese nombre.\n");
  37.                                 printf("Pulsa Enter para salir\n");
  38.                                 getchar();
  39.                                 break;
  40.                         }
  41.                         if((pf2 = fopen(nombre2, "w"))==NULL)//si no se creo,salimos
  42.                         {
  43.                                 printf("Error al crear el fichero. Pulsa Enter para salir\n");
  44.                                 getchar();
  45.                                 break;
  46.                         }
  47.                         ch = fgetc(pf);
  48.                         for (i = 0; ch != EOF; i++)
  49.                         {      
  50.                                 texto = ch;
  51.                                 textocifrado = cifrar(texto, i);
  52.                                 if((i%7)==0)
  53.                                         textocifrado = cifrar(textocifrado, i+7);
  54.                                 textocifrado = cifrar(texto,7);
  55.                                 fputc(textocifrado, pf2);
  56.                                 ch = fgetc(pf);
  57.                         }
  58.                         printf("El archivo se ha cifrado correctamente!\n");
  59.                         exit(1);
  60.                         fclose(pf);
  61.                         fclose(pf2);
  62.                 break;
  63.                        
  64.                 case 2:
  65.                         ingresoDescifrar(nombre,nombre2);
  66.  
  67.                         if((pf = fopen(nombre, "r"))==NULL) //si no existe, salimos
  68.                         {
  69.                                 printf("No se encuentra un fichero con ese nombre.\n");
  70.                                 printf("Pulsa Enter para salir\n");
  71.                                 getchar();
  72.                                 break;
  73.                         }
  74.  
  75.                         if((pf2 = fopen(nombre2, "w"))==NULL)//si no se creo,salimos
  76.                         {
  77.                                 printf("Error al crear el fichero. Pulsa Enter para salir\n");
  78.                                 getchar();
  79.                                 break;
  80.                         }
  81.  
  82.                         ch = fgetc(pf);
  83.                         for (i = 0; ch != EOF; i++)
  84.                         {      
  85.                                 texto = ch;
  86.                                 textodescifrado = descifrar(texto, i);
  87.                                 if((i%7)==0)
  88.                                         textodescifrado = descifrar(textodescifrado, i+7);
  89.                                 textodescifrado = descifrar(texto,7);
  90.                                 fputc(textodescifrado, pf2);
  91.                                 ch = fgetc(pf);
  92.                         }
  93.                         printf("El archivo se ha descifrado correctamente!\n");
  94.  
  95.                         fclose(pf);
  96.                         fclose(pf2);
  97.                         break;
  98.  
  99.                 default:
  100.                         printf("Opcion incorrecta\n");
  101.                         break;
  102.         }
  103.  
  104.  
  105.         printf("               Programado en C por Hack x Crack\n");
  106.         printf("Enter para salir del programa\n");
  107.  
  108.         getchar();
  109.         return 0;
  110. }
  111.  
  112. void ingresoCifrar(char *nombre,char *nombre2)
  113. {
  114.         printf("            CIFRADOR DE ARCHIVOS!!!\n\n");
  115.         printf("Introduce el nombre del archivo que se va a cifrar\n");
  116.         printf("(Debe darse segun nombre.extension)\n");
  117.         printf("El archivo a cifrar debe estar localizado en el mismo\n");
  118.         printf("directorio que este programa\n");
  119.         scanf("%s", nombre);
  120.         getchar();
  121.  
  122.         printf("Que nombre doy al archivo cifrado?\n");
  123.         printf("(Debe darse segun nombre.extension)\n");
  124.         scanf("%s", nombre2);
  125.         getchar();
  126. }
  127.  
  128. void ingresoDescifrar(char *nombre,char *nombre2)
  129. {
  130.        
  131.         printf("           DESCIFRADOR DE ARCHIVOS!!!\n\n");
  132.         printf("Introduce el nombre del archivo que se va a descifrar\n");
  133.         printf("(Debe darse segun nombre.extension)\n");
  134.         printf("El archivo a cifrar debe estar localizado en el mismo\n");
  135.         printf("directorio que este programa\n");
  136.         scanf("%s", nombre);
  137.         getchar();
  138.        
  139.         printf("Que nombre doy al archivo descifrado?\n");
  140.         printf("(Debe darse segun nombre.extension)\n");
  141.         scanf("%s", nombre2);
  142.         getchar();
  143.        
  144. }
  145.  
  146.  
  147. char cifrar(char texto, int i)
  148. {
  149.         //Algoritmo ideado por C_printfer
  150.         char textocifrado;
  151.  
  152.         if (i <= 52) //no comprobamos si el valor de i es mayor o igual que 0 porque obviamente siempre lo va a ser
  153.                 textocifrado = texto + (i + 1);
  154.         else if (i >= 52 && i <= 79)
  155.                 textocifrado = texto - (i + 3);
  156.         else if (i >= 80 && i <= 111)
  157.                 textocifrado = texto + ((i / 2) - 7);
  158.         else if (i >= 112 && i <= 170)
  159.                 textocifrado = texto - (i / 2);
  160.         else if (i >= 171 && i <= 8457)
  161.                 textocifrado = texto - ((i / 3) + 1);
  162.         else if (i >= 8458 && i <= 21349)
  163.                 textocifrado = texto + ((i / 3) + 1);
  164.         else
  165.                 textocifrado = texto - 132;
  166.  
  167.         //ahora damos otra pasada para hacer aun mas dificil la obtencion del texto en claro a partir del texto cifrado,
  168.         //se trata de despistar al enemigo jejeje :D
  169.         if (((i * 3) % 4) == 1)
  170.                 textocifrado = texto - 1;
  171.         if ((i / 5) == 2)
  172.                 textocifrado = texto + (3 * i);
  173.         if (((i + 1) / 2) == 3)
  174.                 textocifrado = texto;
  175.         if (((i - 4) % 10) == 0)
  176.                 textocifrado = texto + (2 - i);
  177.         if (((i - 4) % 10) == 6)
  178.                 textocifrado = texto - 2;
  179.  
  180.         return textocifrado;
  181. }
  182.  
  183. char descifrar(char texto, int i)
  184. {
  185.         //Algoritmo ideado por C_printfer
  186.         char textodescifrado;
  187.  
  188.         if (i <= 52)
  189.                 textodescifrado = texto - (i + 1);
  190.         else if (i >= 52 && i <= 79)
  191.                 textodescifrado = texto + (i + 3);
  192.         else if (i >= 80 && i <= 111)
  193.                 textodescifrado = texto - ((i / 2) - 7);
  194.         else if (i >= 112 && i <= 170)
  195.                 textodescifrado = texto + (i / 2);
  196.         else if (i >= 171 && i <= 8457)
  197.                 textodescifrado = texto + ((i / 3) + 1);
  198.         else if (i >= 8458 && i <= 21349)
  199.                 textodescifrado = texto - ((i / 3) + 1);
  200.         else    
  201.                 textodescifrado = texto + 132;
  202.  
  203.         if (((i * 3) % 4) == 1)
  204.                 textodescifrado = texto + 1;
  205.         if ((i / 5) == 2)
  206.                 textodescifrado = texto - (3 * i);
  207.         if (((i + 1) / 2) == 3)
  208.                 textodescifrado = texto;
  209.         if (((i - 4) % 10) == 0)
  210.                 textodescifrado = texto - (2 - i);
  211.         if (((i - 4) % 10) == 6)
  212.                 textodescifrado = texto + 2;
  213.  
  214.         return textodescifrado;
  215. }
  216.  
  217.  
  218. //Cualquier critica, sugerencia, idea, ayuda, etc., sera bien recibida
  219. //Por  "C_printfer"

Sigo intentando hacer  funcionar algo que tengo pensado para el cifrado pero aun no sale jeje.. Saludos
Título: Re:[Funcionando] Cifrador-descifrador de archivos en C
Publicado por: C_printfer en Agosto 12, 2014, 08:06:11 pm
Si quieres dime y te ayudo...

PD: eso de que el programa lo he hecho yo es mentira 8), ha sido entre todos jeje, lo único que hice yo fue el algoritmo y no sé si es bueno o no.

Salu2!
Título: Re:[Funcionando] Cifrador-descifrador de archivos en C
Publicado por: ravenheart en Septiembre 03, 2014, 12:24:06 am
pero creo que este algoritmo no se puede atacar mediante los ataques existentes sobre textos cifrados.
Crees mal. Tu código al final es poco más que una cifra de Vigenère con ínfulas. Sospecho que caeria rápidamente ante un análisis de frecuencias un poco esmerado.

La segunda ronda es muy tonta. Después de haber cifrado todo el texto, reemplazas la mayoría de caracteres con un cifrado aún más burdo. Sería más útil si lo hicieras sobre textocifrado en lugar de descartar las operaciones anteriores y volver a usar el texto plano.

Si necesitas cifrar algo de forma razonablemente segura, utiliza un algoritmo público conocido.
Título: Re:[Funcionando] Cifrador-descifrador de archivos en C
Publicado por: C_printfer en Septiembre 03, 2014, 11:09:23 am
Primero, ya comenté que yo he hecho el algoritmo como se me ha ocurrido, no he dicho en ningún momento que sea fiable. Si lees arriba los post anteriores verás que lo avisé. Es más, dije también que si alguno sabíais mejorarlo se agradecería, ya que esto salió como proyecto para hacerlo entre miembros del foro.

Bueno, después de buscar en la RAE el significado de la palabra ínfula (http://lema.rae.es/drae/?val=%C3%ADnfula) he de confesar que no entiendo esa frase en la que la has escrito, ya que no encuentro la relación con el significado.

Algo de parecido con Vigenère tiene este algoritmo, pero al no usar una clave como tal (a diferencia de en Vigenère) no veo posible un ataque por frecuencias.

La segunda ronda no me parece tonta, ya que hace más difícil encontrar el patrón de cifrado. Lo de evitar descartar las operaciones anteriores no es mala idea, pero creo que no aporta ninguna mejora a lo que hemos hecho en este caso. La única cuestión es combinar dos algoritmos de cifrado por así decirlo, para dificultar un ataque, así que ambas opciones, tanto la tuya como la mía me parecen buenas.

Existen algoritmos conocidos que te aseguro que son más vulnerables que este, así que tampoco es bueno generalizar. Aunque sí es verdad que hay algoritmos muy buenos antes que usar antes que este invento raro mío jeje.
Título: Re:[Funcionando] Cifrador-descifrador de archivos en C
Publicado por: ravenheart en Septiembre 04, 2014, 09:51:31 am
Primero, ya comenté que yo he hecho el algoritmo como se me ha ocurrido, no he dicho en ningún momento que sea fiable.
Dices literalmente que no crees que se puede atacar con ataques existentes. Eso es confiar mucho en tu algoritmo, ¿no?

Citar
Bueno, después de buscar en la RAE el significado de la palabra ínfula (http://lema.rae.es/drae/?val=%C3%ADnfula) he de confesar que no entiendo esa frase en la que la has escrito, ya que no encuentro la relación con el significado.
Es una frase hecha, y se basa en la acepción 1. Cuando se dice que X es Y con ínfulas, quiere decir que es como Y, con leves mejoras o adornos que no aportan gran cosa.

Citar
Algo de parecido con Vigenère tiene este algoritmo, pero al no usar una clave como tal (a diferencia de en Vigenère) no veo posible un ataque por frecuencias.
Técnicamente utilizas una clave explícita, muy larga, y siempre la misma.

Uno de los problemas de tu algoritmo es que en la primera ronda divides el texto en secciones relativamente largas que son cada una poco menos que triviales de descifrar:
Código: C
  1.         if (i <= 52) //no comprobamos si el valor de i es mayor o igual que 0 porque obviamente siempre lo va a ser
  2.                 textocifrado = texto + (i + 1);
  3.         else if (i >= 52 && i <= 79)
  4.                 textocifrado = texto - (i + 3);
  5.         else if (i >= 80 && i <= 111)
  6.                 textocifrado = texto + ((i / 2) - 7);
  7.         else if (i >= 112 && i <= 170)
  8.                 textocifrado = texto - (i / 2);
  9.         else if (i >= 171 && i <= 8457)
  10.                 textocifrado = texto - ((i / 3) + 1);
  11.         else if (i >= 8458 && i <= 21349)
  12.                 textocifrado = texto + ((i / 3) + 1);
  13.         else
  14.                 textocifrado = texto - 132;

En la segunda ronda, solo confundes algunos caracteres, sobre todo al principio, pero después...
Código: C
  1.  if (((i * 3) % 4) == 1)          //Afecta al 25 % del texto
  2.                 textocifrado = texto - 1;
  3.         if ((i / 5) == 2)              // Solo afecta a i = 10 e i = 11
  4.                 textocifrado = texto + (3 * i);
  5.         if (((i + 1) / 2) == 3)     // Solo afecta a i = 5 e i = 6
  6.                 textocifrado = texto;
  7.         if (((i - 4) % 10) == 0)  // Afecta al 10% de los caracteres
  8.                 textocifrado = texto + (2 - i);
  9.         if (((i - 4) % 10) == 6)  // Afecta al 10% de los caracteres
  10.                 textocifrado = texto - 2;
  11.  
El problema es que de los cinco casos, dos solo se hacen al principio, y el resto afectan a alrededor del 30% del texto (teniendo en cuenta que el 25% del primer caso se solapa con el otro 20% de los dos últimos)
O sea, que de cada 10 caracteres, se pierden 3.
¿Eres capaz de leer lo siguiente?
De?cu?re?co?o ?la?ar?a ?el?fo?os?fi?os?y ?óv?le? d?sd? S?yp?.
No parece demasiado complicado con un poco de esfuerzo. Pero en un caso real, la distribuciónsería aleatoria, y habría más texto junto que puede dar mucha información sobre el contexto (también emborronaría por completo algunas palabras, seguramente).

Citar
Existen algoritmos conocidos que te aseguro que son más vulnerables que este, así que tampoco es bueno generalizar.
Sí, Vigenère y el César.
Título: Re:[Funcionando] Cifrador-descifrador de archivos en C
Publicado por: C_printfer en Septiembre 04, 2014, 05:09:21 pm
Bueno, esta es la última vez que respondo, ya que me da la impresión de que hay cierta acritud hacia mí en tus mensajes. De todas formas, me sorprende que me respondas en este hilo y no en aquél otro que trata sobre velocidad de procesador.

Aprovecho también para comentar que si alguien tiene cualquier queja me la puede decir por privado o puede hablar directamente con los administradores (o co-admins) o el moderador global. Sinceramente, mi única intención es ayudar, aporto lo que puedo en la medida que sé, si sabes mejorar el algoritmo, estoy convencido de que todos los miembros del foro estaríamos agradecidos de tus aportes. Yo aporto y ayudo en la medida en que mis escasas capacidades y pocos conocimientos me lo permiten.


Y ahora respondo (por última vez):
____________________________

SÍ, digo LITERALMENTE, como bien dices, que no CREO que se pueda atacar con ataques existentes. Lee bien, por favor, supongo que igual que conoces el significado de ínfula (muchas gracias por aclararme el significado) conocerás el del verbo creer, pues es una palabra más común. Y dije que cualquier fallo que hubiera en el algoritmo me lo comentaseis, o sea, que no he dicho que mi algoritmo sea infalible, de hecho, es muy simple como se puede apreciar. Imagino que tendrá puntos débiles, pero te repito que de eso se trataba el proyecto, de mejorarlo entre todos. Es decir, te estaría muy agradecido personalmente si en vez de criticar tanto los fallos aportaras alguna mejora.

____________________________________

A diferencia de Vigenère, que ciertamente como bien indicas utiliza una clave fija, nosotros estamos empleando el valor de i para el cifrado, y estamos jugando con aproximaciones, ya que al sumar o restar un valor al valor ASCII del carácter se hace un redondeo del valor, lo cual hace más difícil el ataque, bajo mi punto de vista.

_________________________________________

Claro que con la segunda pasada no vuelvo a cifrar todo el texto, ¿que utilidad tendría entonces la primera pasada? Es posible que se solapen algunos caracteres, claro que sí, toda la razón tienes, pero ahí ya dependemos del valor de i y de si se cumple o no la condición. Lo puse así para que sea difícil atacar. Piénsalo al revés, o sea, ¿cómo sacar el texto en claro si no sabemos en cuál de los if hemos entrado? (Es posible que hayamos entrado en dos, teniendo validez la operación que se indicase en el último de ellos). Pero repito, que quede claro, esta es mi opinión del algoritmo, mi idea, no digo que sea infalible, que quede claro por favor.

Respecto a los valores que dices que afecta el segundo cifrado, también lo dije, que cada uno cambie esos números como quiera, de modo que solamente él posea su clave secreta.

__________________________________________________

Citar
Citar
Algo de parecido con Vigenère tiene este algoritmo, pero al no usar una clave como tal (a diferencia de en Vigenère) no veo posible un ataque por frecuencias.
Técnicamente utilizas una clave explícita, muy larga, y siempre la misma.

Sí, utilizo una clave, pero ¿por qué dices que es siempre la misma? A mi criterio, esa es una diferencia muy importante con Vigenère, que yo sumo o resto al valor ASCII del carácter dependiendo del valor de i y además, como i cambia de valor, la clave va cambiando, pero es mi modesta opinión.

_______________________________________________________________

Citar
Citar
Existen algoritmos conocidos que te aseguro que son más vulnerables que este, así que tampoco es bueno generalizar.
Sí, Vigenère y el César.

Y alguno más.



Saludos.
Título: Re:[Funcionando] Cifrador-descifrador de archivos en C
Publicado por: ravenheart en Septiembre 04, 2014, 09:52:08 pm
Bueno, esta es la última vez que respondo, ya que me da la impresión de que hay cierta acritud hacia mí en tus mensajes. De todas formas, me sorprende que me respondas en este hilo y no en aquél otro que trata sobre velocidad de procesador.
C_printfer, no hay ninguna acritud hacia ti por mi parte. Lamento que lo hayas sentido así. Si he respondido en este hilo y no en el otro ha sido porque me interesa más este y he andado muy justo de tiempo. Cuando termine aquí lo miro, ahora que tengo un ratillo.

Citar
Sinceramente, mi única intención es ayudar, aporto lo que puedo en la medida que sé,
Eso está muy bien.

Citar
si sabes mejorar el algoritmo, estoy convencido de que todos los miembros del foro estaríamos agradecidos de tus aportes. Yo aporto y ayudo en la medida en que mis escasas capacidades y pocos conocimientos me lo permiten.
No te lo tomes a mal, porque no va con acritud, pero hace ya muchos años que pasó mi etapa de inventar esquemas de cifrado. No quiero decir que sea cosa de críos, ni nada por el estilo (lo aclaro porque puede sonar a eso); simplemente, dejó de motivarme. Es importante entender una cosa: la criptografía es tremendamente complicada. Las mentes más brillantes del mundo, los mayores expertos en criptografía, compiten entre sí por premios suculentos, en concursos que les dan años para diseñar y probar nuevos esquemas de cifrado. ¿Y cuál es el resultado? SHA, o MD5, por ejemplo. RSA aún resiste, afortunadamente. Aunque ya hace tiempo que se desconfía. Supongo que podría mejorar tu algoritmo si me pusiera, pero, ¿para qué? Seguirá siendo fundamentalmente inseguro, por mucho que me esfuerce. Prefiero señalar los problemas que veo (que bien gordos deben de ser para que los vea yo con solo mirar el código fuente ;-) )

Citar
Citar
Citar
Algo de parecido con Vigenère tiene este algoritmo, pero al no usar una clave como tal (a diferencia de en Vigenère) no veo posible un ataque por frecuencias.
Técnicamente utilizas una clave explícita, muy larga, y siempre la misma.

Sí, utilizo una clave, pero ¿por qué dices que es siempre la misma? A mi criterio, esa es una diferencia muy importante con Vigenère, que yo sumo o resto al valor ASCII del carácter dependiendo del valor de i y además, como i cambia de valor, la clave va cambiando, pero es mi modesta opinión.
Es posible que te estés confundiendo. El cifrado del césar utiliza una letra como clave, por ejemplo la A, y entonces, a pasa a ser b, b pasa a ser c, etc. Vigenère utilizaba claves de varios carácteres, ue se repiten secuencialmente. Si creas una cadena con los valores sucesivos de i (1, 2, 3...) hasta la longitud del mensaje, aplicas las operaciones relativas a su posición, y haces lo mismo con la segunda pasada, tendrás tu clave. Es una clave muy larga, pero por la forma de construirla (los valores adyacentes casi siempre se diferencian solo en uno), no es muy efectiva.

Citar
A diferencia de Vigenère, que ciertamente como bien indicas utiliza una clave fija, nosotros estamos empleando el valor de i para el cifrado, y estamos jugando con aproximaciones, ya que al sumar o restar un valor al valor ASCII del carácter se hace un redondeo del valor, lo cual hace más difícil el ataque, bajo mi punto de vista.
No entiendo esto. ¿Me lo podrías explicar?

Citar
Claro que con la segunda pasada no vuelvo a cifrar todo el texto, ¿que utilidad tendría entonces la primera pasada?
La misma que ahora. Aplicar operaciones diferentes, confundiendo al atacante. Claro que entonces no haría falta separar el algoritmo en dos pasos... Pero en realidad ahora tampoco es necesario.

Citar
Es decir, te estaría muy agradecido personalmente si en vez de criticar tanto los fallos aportaras alguna mejora.
Esto es terreno pantanoso.
Para empezar, hacer la misma operación linean sencilla (i + X) a una serie consecutiva de cientos de carácteres es muy vulnerable.
Yo lo que haría, para complicarlo, es aplicar una serie de operaciones lógicas a la i. Por ejemplo:
int j = i ^123;
j =  j & 0xF0;
j = j | (i & 0x0F);
j = i ^ 123;  // Esta jota es la que sumaríamos al valor original
Es una serie puesta al azar, pero habría que estudiar cómo se comporta en la práctica. Un objetivo interesante es que, sea cual sea la entrada, la salida en formato binario tenga aproximadamente el mismo número de unos que de ceros. Tea se basa en algo parecido.

Si de verdad quieres hacer una segunda pasada, una opción a contemplar es utilizar el texto cifrado intermedio como clave para la segunda pasada.
Por ejemplo, tienes:
MENSAJE EN CLARO
Haces una primera pasada completa, que da (caracteres puestos al azar):
ASDJFLEOFMELFJEF

Pues podrías combinar con alguna operación compleja la A y la S, la S y la D, la D y la J... Incluso puedes combinar series más largas. Claro, que el resultado tiene que ser invertible.
Esto tiene una serie de pegas: un error de un bit hace inservible todo o al menos buena parte del mensaje. No puedes descifrar una parte de un mensaje sin procesar todo lo anterior (o incluso el mensaje entero, según).

Por último, que la fortaleza esté en el algoritmo es mala cosa. Deberías poder suministrar una contraseña y hacer algo con ella que complique aún más las cosas. Volviendo al punto de atrás, si utilizas una contraseña, una vez que terminas la primera pasada, puedes ejecutar otra pasada exactamente igual pero cambiando la contraseña por el texto semicifrado (es decir, cifrarías el texto que ha sido procesado en la primera pasada usando como clave ese mismo texto, en el ejemplo ASDJFL...).
Título: Re:[Funcionando] Cifrador-descifrador de archivos en C
Publicado por: Citrusl en Septiembre 28, 2014, 01:11:50 am
Querías Críticas y comentarios? Pues prepárate porque aquí vienen!!  >:( :D

Primero... Funciona... pero está incompleto...

Por ejemplo en la consola... no me das opciónes de qué acción quiero realizar.

Iría bien un:

a) Desea codificar?
b) Desea decodificar?

El resto del menú está excelente...

Otra cosa... Probe descifrando u cifrando un .exe (nose bien si encripta o desencripta por default) En fín, parece que lo cifró y lo cambió a un .txt .
Lo realmente espectacular es que lo hizo ilegible (un texto raro casi vacio) y al darle click al acceso directo de la aplicación... funcionó a pesar de sufrir todos esos cambios.

Tengo que felicitarte/los por eso. Es increible... no lo puedo creer.

PROBLEMA: muy bien fue bien con un .exe...
Probemos con un .txt con información valiosa. (un log quizá) Lo ciframos...
Abrimos el .txt...  OH genial lo cifró perfecto... peeeeeeeeeeeeeeeeeeeeeeeeeeerooooooooooooooooooooooooooo....
Aver... lo voy a descifrar... UPS .txt VACIO !!! 

Esto es cosa seria, por favor que alguien ayude a arreglar eso por el progreso de la ciencia en C++ !! Hoy hacemos historia!

"Un pequeño paso para un programador... pero un gran salto para C++ "


[add]
Ups... ahora veo que son dos programas un codificador y descifrador.

Debí haber quedado como un idiota.  ???


Lo siento... sí el programa anda 100%

Buen trabajo!

___edited [add +1]___
Título: Re:[Funcionando] Cifrador-descifrador de archivos en C
Publicado por: geeksur en Septiembre 06, 2021, 01:58:24 pm
No soy un experto y mucho menos en cualquier tema, no en criptografía, pero creo que este algoritmo no puede ser atacado por los ataques existentes a textos cifrados.