Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Encriptacion en C

Estas en el tema de Encriptacion en C en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 24/10/2015, 13:42
Avatar de gaara_fiby  
Fecha de Ingreso: octubre-2015
Mensajes: 3
Antigüedad: 5 años, 7 meses
Puntos: 0
Pregunta Encriptacion en C

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 encriptado quedaría así: Cruuloor Flhjr. De todas maneras por si no me explico bien les dejo el programa que yo eh hecho:

Código C:
Ver original
  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 encripta 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.
  #2 (permalink)  
Antiguo 24/10/2015, 17:00
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 6 años, 3 meses
Puntos: 3
Respuesta: Encriptacion en C

Cambia esto:
Código C++:
Ver original
  1. 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 };
Por esto:
Código C++:
Ver original
  1. char Letras[]="ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";

Y esto:
Código C++:
Ver original
  1. Mensaje[i]=Mensaje[i]+numero;

Por esto:
Código C++:
Ver original
  1. int pos = strchr (Letras, Mensaje [i]);
  2. Mensaje[i]=Letras [(strlen (letras) +Letras [pos]+numero)%strlen (Letras)];

En la parte de desencriptado es igual pero restando.
  #3 (permalink)  
Antiguo 24/10/2015, 20:16
Avatar de gaara_fiby  
Fecha de Ingreso: octubre-2015
Mensajes: 3
Antigüedad: 5 años, 7 meses
Puntos: 0
Respuesta: Encriptacion en C

Si gracias ya terminado el código me salio así:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void codificar(char Mensaje[100],int numero);
  5. void decodificar(char Mensaje[100],int numero);
  6. char* ABC = "ABCDEFGHIJKLMN\xa5OPQRSTUVWXYZ";
  7. char* abc = "abcdefghijklm\xa4opqrstuvwxyz";
  8.  
  9. int main(void){
  10. int n;
  11. char cadena[100];
  12. printf("introduce un mensaje: ");
  13. fflush(stdin);
  14. fgets(cadena, 100, stdin);
  15. printf("introduce un numero: ");
  16. scanf("%d",&n);
  17. while(getchar()!= '\n' );
  18. codificar(cadena, n);
  19. decodificar(cadena,n);
  20. return 0;
  21. }
  22.  
  23. void codificar(char Mensaje[100],int numero){
  24. int i;
  25. char*p;
  26. for(i = 0; Mensaje[i]; i++){
  27. if( p = strchr(ABC, Mensaje[i]) ){
  28. Mensaje[i] = ABC[(p - ABC + numero) % 27];
  29. }
  30. if( p = strchr(abc, Mensaje[i]) ){
  31. Mensaje[i] = abc[(p - abc + numero) % 27];
  32. }
  33. }
  34. printf("\nEl mensaje codificado es:\n%s\n",Mensaje);
  35. }
  36.  
  37. void decodificar(char Mensaje[100],int numero){
  38. char*p;
  39. int i;
  40. for(i = 0; Mensaje[i]; i++){
  41. if( p = strchr(ABC, Mensaje[i]) ){
  42. Mensaje[i] = ABC[(p - ABC - numero + 27) % 27];
  43. }
  44. if( p = strchr(abc, Mensaje[i]) ){
  45. Mensaje[i] = abc[(p - abc - numero + 27) % 27];
  46. }
  47.  
  48. }
  49. printf("\nEl mensaje decodificado es:\n%s\n",Mensaje);
  50. }

Gracias por la ayuda.
  #4 (permalink)  
Antiguo 25/10/2015, 15:17
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 6 años, 3 meses
Puntos: 3
Respuesta: Encriptacion en C

Perdón, mi código es erróneo. Prueba esto que si te funcionara correctamente:
Encriptar:
Código C:
Ver original
  1. int largo,posInicial,posFinal;
  2. char Mensaje []="HOLA";
  3. char Letras []="ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
  4. int numero=5;
  5.  
  6. largo = strlen (Letras);
  7. posInicial = strchr (Letras,Mensaje [i]);
  8. posFinal = (largo + posInicial + numero) % largo;
  9. Mensaje [i]=Letras [posFinal];

Desecriptar:
Código C:
Ver original
  1. int largo,posInicial,posFinal;
  2. char Mensaje []="MTPF";
  3. char Letras []="ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
  4. int numero=5;
  5.  
  6. largo = strlen (Letras);
  7. posInicial = strchr (Letras,Mensaje [i]);
  8. posFinal = (largo + posInicial - numero) % largo;
  9. Mensaje [i]=Letras [posFinal];

Etiquetas: ascii, encriptacion, funciones, lenguajec
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:50.