• Inicio
  • Buscar
  • Ingresar
  • Registrarse

    Seguridad en gadgets tecnológicos: todo lo que necesitas saber para protegerte

    • Hack x Crack - Comunidad de Seguridad informática »
    • Programación »
    • C / C++ »
    • [Funcionando] Cifrador-descifrador de archivos en C
    • Imprimir
    Páginas: 1 [2] 3   Ir Abajo

    Autor Tema: [Funcionando] Cifrador-descifrador de archivos en C  (Leído 12225 veces)

    Desconectado bum3r

    • { L0 } Ñuub
    • Mensajes: 21
      • Ver Perfil
    Re:[Funcionando] Cifrador-descifrador de archivos en C
    « Respuesta #10 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.
    En línea

    Desconectado C_printfer

    • { L4 } Geek
    • ****
    • Mensajes: 350
    • NO RESPONDO PRIVADOS CON DUDAS, para eso el foro
      • Ver Perfil
    Re:[Funcionando] Cifrador-descifrador de archivos en C
    « Respuesta #11 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!
    « Última modificación: Agosto 12, 2014, 10:39:39 am por C_printfer »
    En línea
    "Cuando leo comentarios de propuestas sobre a donde debe ir C, a menudo vuelvo la vista atrás y doy gracias de que no se haya desarrollado bajo el asesoramiento de multitudes de todo el mundo".

    Dennis MacAlistair Ritchie

    https://twitter.com/C_printfer

    Desconectado bum3r

    • { L0 } Ñuub
    • Mensajes: 21
      • Ver Perfil
    Re:[Funcionando] Cifrador-descifrador de archivos en C
    « Respuesta #12 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
    « Última modificación: Septiembre 03, 2014, 01:20:42 pm por Krakakanok »
    En línea

    Desconectado C_printfer

    • { L4 } Geek
    • ****
    • Mensajes: 350
    • NO RESPONDO PRIVADOS CON DUDAS, para eso el foro
      • Ver Perfil
    Re:[Funcionando] Cifrador-descifrador de archivos en C
    « Respuesta #13 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!
    « Última modificación: Agosto 14, 2014, 10:23:01 am por C_printfer »
    En línea
    "Cuando leo comentarios de propuestas sobre a donde debe ir C, a menudo vuelvo la vista atrás y doy gracias de que no se haya desarrollado bajo el asesoramiento de multitudes de todo el mundo".

    Dennis MacAlistair Ritchie

    https://twitter.com/C_printfer

    Desconectado ravenheart

    • { L7 } Juanker
    • *******
    • Mensajes: 1359
    • Todos mis mensajes están bajo la licencia WTFPL v2
      • Ver Perfil
    Re:[Funcionando] Cifrador-descifrador de archivos en C
    « Respuesta #14 en: Septiembre 03, 2014, 12:24:06 am »
    Cita de: C_printfer en Agosto 12, 2014, 02:06:16 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.
    En línea
    You do not need hope if you have drama to back you up.

    Desconectado C_printfer

    • { L4 } Geek
    • ****
    • Mensajes: 350
    • NO RESPONDO PRIVADOS CON DUDAS, para eso el foro
      • Ver Perfil
    Re:[Funcionando] Cifrador-descifrador de archivos en C
    « Respuesta #15 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.
    En línea
    "Cuando leo comentarios de propuestas sobre a donde debe ir C, a menudo vuelvo la vista atrás y doy gracias de que no se haya desarrollado bajo el asesoramiento de multitudes de todo el mundo".

    Dennis MacAlistair Ritchie

    https://twitter.com/C_printfer

    Desconectado ravenheart

    • { L7 } Juanker
    • *******
    • Mensajes: 1359
    • Todos mis mensajes están bajo la licencia WTFPL v2
      • Ver Perfil
    Re:[Funcionando] Cifrador-descifrador de archivos en C
    « Respuesta #16 en: Septiembre 04, 2014, 09:51:31 am »
    Cita de: 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.
    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.
    « Última modificación: Septiembre 04, 2014, 02:39:15 pm por Krakakanok »
    En línea
    You do not need hope if you have drama to back you up.

    Desconectado C_printfer

    • { L4 } Geek
    • ****
    • Mensajes: 350
    • NO RESPONDO PRIVADOS CON DUDAS, para eso el foro
      • Ver Perfil
    Re:[Funcionando] Cifrador-descifrador de archivos en C
    « Respuesta #17 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.
    « Última modificación: Septiembre 04, 2014, 05:41:44 pm por C_printfer »
    En línea
    "Cuando leo comentarios de propuestas sobre a donde debe ir C, a menudo vuelvo la vista atrás y doy gracias de que no se haya desarrollado bajo el asesoramiento de multitudes de todo el mundo".

    Dennis MacAlistair Ritchie

    https://twitter.com/C_printfer

    Desconectado ravenheart

    • { L7 } Juanker
    • *******
    • Mensajes: 1359
    • Todos mis mensajes están bajo la licencia WTFPL v2
      • Ver Perfil
    Re:[Funcionando] Cifrador-descifrador de archivos en C
    « Respuesta #18 en: Septiembre 04, 2014, 09:52:08 pm »
    Cita de: 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.
    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...).
    En línea
    You do not need hope if you have drama to back you up.

    Desconectado Citrusl

    • { L0 } Ñuub
    • Mensajes: 5
      • Ver Perfil
    Re:[Funcionando] Cifrador-descifrador de archivos en C
    « Respuesta #19 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]___
    « Última modificación: Septiembre 28, 2014, 04:17:43 am por b10s_0v3rr1d3 »
    En línea
    C++ RULES!

    • Imprimir
    Páginas: 1 [2] 3   Ir Arriba
    • Hack x Crack - Comunidad de Seguridad informática »
    • Programación »
    • C / C++ »
    • [Funcionando] Cifrador-descifrador de archivos en C
     

    • SMF | SMF © 2013, Simple Machines
    • XHTML
    • RSS
    • WAP2
    Va un mudo y le dice a un sordo: Hack x Crack usa cookies. Pues eso... Learn more