elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Encriptacion en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Encriptacion en C  (Leído 2,858 veces)
Akise Aru

Desconectado Desconectado

Mensajes: 1



Ver Perfil
Encriptacion en C
« 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.


En línea

Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Encriptacion en C
« Respuesta #1 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...


En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Encriptacion en C
« Respuesta #2 en: 25 Octubre 2015, 21:16 pm »

gets es una función obsoleta e insegura. Se debe utilizar en su lugar fgets.

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.
« Última modificación: 25 Octubre 2015, 21:30 pm por ivancea96 » En línea

Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Encriptacion en C
« Respuesta #3 en: 25 Octubre 2015, 21:26 pm »

Lo siento... Estoy acostumbrado a C++ y se me había olvidado
En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
cifrado MD5
Programación Visual Basic
Ertai 4 4,835 Último mensaje 10 Mayo 2005, 11:55 am
por Ertai
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines