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

Problema con cifrado cesar codigo C

Estas en el tema de Problema con cifrado cesar codigo C en el foro de C/C++ en Foros del Web. Tengo un problema con el codigo en C de un programa de cifrado cesar, la parte de introducir una frase, que el programa cuente las ...
  #1 (permalink)  
Antiguo 02/02/2011, 02:09
 
Fecha de Ingreso: febrero-2011
Mensajes: 3
Antigüedad: 13 años, 2 meses
Puntos: 0
Problema con cifrado cesar codigo C

Tengo un problema con el codigo en C de un programa de cifrado cesar, la parte de introducir una frase, que el programa cuente las letras que tenemos y que a cada letra nos adjudique un número al azar, lo tenemos, lo que nos falta es que nos enlaze los numeros con las letras, y el cifrado con diferentes carácteres(tanto letras como signos) aver si me podeis ayudar, os dejo el código que tenemos (tengo que añadir,que también tengo el fallo de que escriba la palabra que escribo, siempre me sale en el cifrado por números, un 4, probadlo si podeis) :




#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

int i, n, n1, aleatorio, P=1, U=10;
char txt[50];

int main()
{

/*Petición y contador de caracteres de frase a codificar*/
printf("Introduzca una frase:\n");

for(n=0;(txt[n]=getchar()) != '\n';++n);
txt[n]='\0';

printf("La palabra %s tiene %d letras.\n",txt,n);
printf("La generacion aleatoria es: ");

/*Generación de número al azar por letra introducida*/
srand(time(NULL));
for (i = 0; i < n; i ++)

{
aleatorio = P+(int)(((U-P+1.0)*rand())/(RAND_MAX+1.0));
printf("%d ", aleatorio);
}

printf("\n");
system("PAUSE");
return 0;
}
  #2 (permalink)  
Antiguo 04/02/2011, 09:23
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Problema con cifrado cesar codigo C

Lamento decirte que eso que tratas de hacer no es un cifrado cesar ¬¬. Es mas, ninguna forma de cifrado utiliza numeros pseudo aleatorios.
  #3 (permalink)  
Antiguo 04/02/2011, 09:48
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Problema con cifrado cesar codigo C

Cesar es un cifrado de basado en un corrimiento a la derecha en tres lugares, por lo que:
a -> d
b -> e
c -> f
d -> g

y asi sucesivamente :P

Código c:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <strings.h>
  4. #include <string.h>
  5.  
  6. int main(void){
  7.   int i;
  8.   char cadena[50];
  9.   bzero((char *)&cadena, sizeof(cadena));
  10.   printf("Digite la cadena que desea cifrar: ");
  11.   scanf("%[^\n]", cadena);
  12.   printf("cadena digitada: %s\n", cadena);
  13.   while(getchar() != '\n');
  14.   for(i = 0; i < strlen(cadena); i++){
  15.     //printf("cadena[%i]: %i\n", i, cadena[i]);
  16.     if(cadena[i] == 32) continue;
  17.     if(cadena[i] >= 65 && cadena[i] <= 90){ //Si es mayuscula
  18.       cadena[i] = ((cadena[i] - 65 + 3)%26) + 65;
  19.     }
  20.     else{
  21.       if(cadena[i] >= 97 && cadena[i] <= 122){ //Si es minuscula
  22.         cadena[i] = ((cadena[i] - 97 + 3)%26) + 97;
  23.       }
  24.       else{
  25.         printf("Caracter %c no válido\n", cadena[i]);
  26.         return -1;
  27.       }
  28.     }
  29.   }
  30.   printf("Texto cifrado: %s\n", cadena);
  31.   return 0;
  32. }
  #4 (permalink)  
Antiguo 07/02/2011, 04:49
 
Fecha de Ingreso: febrero-2011
Mensajes: 3
Antigüedad: 13 años, 2 meses
Puntos: 0
Pregunta Respuesta: Problema con cifrado cesar codigo C

Muchas gracias por la respuesta, me ha servido mucho, pero tengo una última duda, tengo este código, y necesito que me cuente los espacios, ya que no me lo hace. El código que tú has puesto #3 me sirve, pero no genera números aleatorios por carácter en el string, simplemente suma 4 posiciones a cada carácter. Pongo código a ver si me podéis ayudar con ese problema de que no cuente los espacios. Gracias

Código:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define max_tam 1000

void codificacion();
int aleatorio();

char s_patron[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz0123456789?!*()$#.,";
char s_original[max_tam], s_codificado[max_tam], s_decodificado[max_tam];
int t_original, t_patron, t_codificado, t_codigo, t_decodificado, s_codigo[max_tam];

main()
{  
      int i;
      srand(time((NULL)));
      printf("Introduce un texto a codificar:\n");
      scanf("%s", &s_original);
      codificacion();
      printf("La frase codificada es: %s\n", s_codificado);
      for(i=0;i<t_codigo;i++)printf("%d", s_codigo[i]);
      system("PAUSE");
}

void codificacion()
{
      int i, j, n;
      t_original=strlen(s_original);
      for(i=0; i<t_original;i++)
      {
               t_patron=strlen(s_patron);
               for(j=0; j<t_patron; j++)
               {
                        if(s_original[i]==s_patron[j] || s_original[i] == ' ')
                        {
                             n=aleatorio();
                             s_codificado[i]=s_patron[j+n];
                             s_codigo[i]=n;                            
                        }
               }                                      
      }
}     

int aleatorio()
{
      int aleatorio;
      aleatorio = rand()%9+1;
      return aleatorio;
}
  #5 (permalink)  
Antiguo 07/02/2011, 05:29
 
Fecha de Ingreso: febrero-2011
Mensajes: 3
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Problema con cifrado cesar codigo C

Solucionado!! :)

Código:
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define max_tam 1000

void codificacion();
void decodificacion();
int aleatorio();

char s_patron[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 0123456789?!*()$#.,";
char s_original[max_tam], s_codificado[max_tam], s_decodificado[max_tam];
int t_original, t_patron, t_codificado, t_codigo, t_decodificado, s_codigo[max_tam];

main()
{  
      int i;
      srand(time((NULL)));
      printf("Introduce un texto a codificar:\n");
      scanf("%[^\n]", s_original);
      t_original=strlen(s_original);
      printf("El codigo es: ");
      codificacion();
      printf("\nLa frase codificada es: %s\n", s_codificado);
      decodificacion();
      printf("La frase decodificada es: %s\n", s_decodificado); 
      system("PAUSE");
}

void codificacion()
{
      int i, j, n;

      for(i=0; i<t_original;i++)
      {
               t_patron=strlen(s_patron);
               for(j=0; j<t_patron; j++)
               {
                        if(s_original[i]==s_patron[j])
                        {
                             n=aleatorio();
                             s_codificado[i]=s_patron[j+n];
                             s_codigo[i]=n; 
                             printf("%d", n);                
                        }
               }                                      
      }
}     

void decodificacion()
{
      int i, j, n;
      t_codificado=strlen(s_codificado);
      for(i=0; i<t_codificado;i++)
      {
               for(j=0; j<t_patron; j++)
               {
                        if(s_codificado[i]==s_patron[j]) s_decodificado[i]=s_patron[j-s_codigo[i]];
               }                                      
      }
} 

int aleatorio()
{
      int aleatorio;
      aleatorio = rand()%9+1;
      return aleatorio;
}

Etiquetas: cifrado
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 17:09.