Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Akise Aru en 24 Octubre 2015, 22:20 pm



Título: Encriptacion en C
Publicado por: Akise Aru en 24 Octubre 2015, 22:20 pm
Primero que nada hola a todos, mi problema es el siguiente: Necesito hacer un programa en C que utilice el cifrado Cesar como base, el programa le pide al usuario que ingrese una frase y el numero de veces que quiera recorrer todas las letras de la frase. Por ejemplo si el usuario ingresa la frase: Zorrillo Ciego, y el usuario decide recorrerlo tres veces, el mensaje cifrado quedaría así: Cruuloor Flhjr. De todas maneras por si no me explico bien les dejo el programa que yo eh hecho:

Código
  1. #include <stdio.h>
  2.  
  3. char Letras[27]={ A , B , C , D , E , F , G , H , I , J , K , L , M , N , Ñ , O , P , Q , R , S , T , U , V , W , X , Y , Z };
  4. void codificar(char Mensaje[27],int numero);
  5. void decodificar(char Mensaje[27],int numero);
  6.  
  7. void codificar(char Mensaje[27],int numero)
  8. {
  9. int i=0;
  10. char c;
  11. while(Mensaje[i]!= \0 )
  12. {
  13. Mensaje[i]=Mensaje[i]+numero;
  14. i++;
  15. }
  16. printf("\nEl mensaje codificado es:\n%s\n",Mensaje);
  17. }
  18.  
  19. void decodificar(char Mensaje[27],int numero)
  20. {
  21. int i=0;
  22. while(Mensaje[i]!= \0 )
  23. {
  24. Mensaje[i]=Mensaje[i]-numero;
  25. i++;
  26. }
  27. printf("\nEl mensaje decodificado es:\n%s\n",Mensaje);
  28. }
  29.  
  30. int main()
  31. {
  32. int n;
  33. char cadena[27];
  34. printf("introduce un mensaje: ");
  35. fflush(stdin);
  36. scanf("%s", cadena);
  37. while(getchar()!= \n );
  38. printf("introduce un numero: ");
  39. scanf("%d",&n);
  40. while(getchar()!= \n );
  41. codificar(cadena, n);
  42. decodificar(cadena, n);
  43. return 0;
  44. }

Mi primer problema es que no se como hacer que si el usuario introduce una palabra con Ñ y lo quiere por ejemplo recorrer una sola vez aparezca la O, en lugar del siguiente carácter ASCII que seria este ª. Mi segundo problema esta en que no me admite mensajes con espacios y solo me cifra la primer palabra, lo que quiero es que reconozca los espacios y no me los encripte simplemente que los muestre. Y por ultimo como hacer que si inserto una Z por ejemplo, y pido que se recorra una vez, me muestre la A, en lugar del siguiente carácter ASCII que seria el corchete. Ojala me puedan ayudar, después de tantos intentos ya no se me ocurre sinceramente como hacerlo y ya estoy harto. Bueno, de ante mano gracias y espero me puedan ayudar.


Título: Re: Encriptacion en C
Publicado por: Seyro97 en 25 Octubre 2015, 21:02 pm
Citar
por ultimo como hacer que si inserto una Z por ejemplo, y pido que se recorra una vez, me muestre la A, en lugar del siguiente carácter ASCII que seria el corchete

En caso de hacer esto, estarías perdiendo información, por lo que no podrías decodificarlo... Por cierto, para ayudarte, primero inténtalo.

Respecto a que solo lee palabras, eso es por culpa de scanf. Tienes que usar la función gets para obtener la cadena completa...


Título: Re: Encriptacion en C
Publicado por: ivancea96 en 25 Octubre 2015, 21:16 pm
gets es una función obsoleta e insegura. Se debe utilizar en su lugar fgets (http://www.cplusplus.com/reference/cstdio/fgets/).

https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html (https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)

En cuanto al problema Akise Aru, ve por partes. Primero el codificador, y una vez este funcione, el decodificador. Recuerda identar el código para mayor legibilidad.

Código
  1. char Letras[27]={ 'A' , 'B' , 'C' , 'D' };
  2. while(getchar()!= '\n' );
  3. while(Mensaje[i]!= '\0' )

Los caracteres se colocan entre comillas simples 'A'. No sé si fue un error al poner el código en el foro, o si en verdad lo tienes así. Solo lo comento.

Tal como lo tienes, ya solo te faltan 2 cosa:
La primera es comprobar si la letra a tratar es una letra o no. Si no es una letra, no la modificas: pasas a la siguiente.
La segunda es comprobar si al sumar o restar, se sale del rango de las letras. Si es así, modificar el valor adecuadamente.

El tema de la Ñ desde luego complica un poco el algoritmo. Pero utilizando un arreglo como el que tienes de letras, jugando con índices, lo lograrás :D!

Ya comentarás.


Título: Re: Encriptacion en C
Publicado por: Seyro97 en 25 Octubre 2015, 21:26 pm
Lo siento... Estoy acostumbrado a C++ y se me había olvidado