Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Alejan_dro

#1
Necesito ayuda !! me piden hacer un programa que le pida al usuario ingresar una palabra y la cifre utilizando el cifrado de cesar, eso es lo que hice hasta el momento. ejemplo:
palabra que ingresa el usuario: maria
palabra cifrada: pduld

Ahora me pide que realice el cifrado vigenere mediante una función utilizando estas dos palabras.
Ejemplo:
Palabra: maria  //guardada en cadenaOriginal
Clave: pduld     //guardada en cadenaCifrada
Resultado que debo obtener: cemue

COMO REALIZO ESTE CIFRADO VIGENERE UTILIZANDO EL CODIGO ASCII

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

#define LONGITUD_DEL_ALFABETO 26
#define INICIO_DEL_ALFABETO_MAYUSCULAS 65
#define INICIO_DEL_ALFABETO_MINUSCULAS 97

#define LONGITUD_CADENA 3000
#define MOD(i, n) (i % n + n) % n //para calcular el modulo positivo.



const char *alfabetominusculas = "abcdefghijklmnopqrstuvwxyz",
         *ALFABETOMAYUSCULAS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";



//Declaracion de funciones.
void cifrarMensaje(char *cadena, char *destinoCadena, int desplazamiento);
void descifrarMensaje(char *cadena, char *destinoCadena, int desplazamiento);
int ord(char varCaracter);
void saltarLinea();
void limpiarPantalla();

//Implementacion de funciones.
void cifrarMensaje(char *cadena, char *destinoCadena, int desplazamiento)
{
   int varIterador = 0;
   
   while(cadena[varIterador])
   {
      char varCaracterActual = cadena[varIterador];
      int varValorEnteroDe = ord(varCaracterActual);
      
      if (!isalpha(varCaracterActual))
      {
         destinoCadena[varIterador] = varCaracterActual;
         varIterador++;
         continue;
      }
      if (isupper(varCaracterActual))
      {
         destinoCadena[varIterador] = ALFABETOMAYUSCULAS[(varValorEnteroDe - INICIO_DEL_ALFABETO_MAYUSCULAS + desplazamiento) % LONGITUD_DEL_ALFABETO];
      }
      else
      {
         destinoCadena[varIterador] = alfabetominusculas[(varValorEnteroDe - INICIO_DEL_ALFABETO_MINUSCULAS + desplazamiento) % LONGITUD_DEL_ALFABETO];
      }
      varIterador++;
   }
}
void descifrarMensaje(char *cadena, char *destinoCadena, int desplazamiento)
{
   int varIterador = 0;
   
   while(cadena[varIterador])
   {
      char varCaracterActual = cadena[varIterador];
      int varValorEnteroDe = ord(varCaracterActual);
      
      if (!isalpha(varCaracterActual))
      {
         destinoCadena[varIterador] = varCaracterActual;
         varIterador++;
         continue;
      }
      if (isupper(varCaracterActual))
      {
         destinoCadena[varIterador] = ALFABETOMAYUSCULAS[MOD(varValorEnteroDe - INICIO_DEL_ALFABETO_MAYUSCULAS - desplazamiento, LONGITUD_DEL_ALFABETO)];
      }
      else
      {
         destinoCadena[varIterador] = alfabetominusculas[MOD(varValorEnteroDe - INICIO_DEL_ALFABETO_MINUSCULAS - desplazamiento, LONGITUD_DEL_ALFABETO)];
      }
      varIterador++;
   }
}

int ord(char varCaracter)
{
   return (int)varCaracter;
}
void saltarLinea()
{
   printf("\n");
}

void limpiarPantalla()
{
   system("cls");
}

//Funcion principal.
int main(void)
{
   char cadenaOriginal[LONGITUD_CADENA], cadenaCifrada[LONGITUD_CADENA], cadenaDescifrada[LONGITUD_CADENA];
   int varDesplazamiento;
   
   printf("\t\tIngrese el mensaje que desea cifrar[Utilice maximo %d caracteres]:  ", LONGITUD_CADENA - 1);
   fgets(cadenaOriginal, LONGITUD_CADENA, stdin);
   saltarLinea();
   
   printf("\t\tIngrese el factor de desplazamiento para el cifrado:  ");
   scanf("%d", &varDesplazamiento);
   //limpiarPantalla();
   saltarLinea();
   
   cifrarMensaje(cadenaOriginal, cadenaCifrada, varDesplazamiento);
   printf("\t\tEl mensaje cifrado es:  %s", cadenaCifrada);
   
   descifrarMensaje(cadenaCifrada, cadenaDescifrada, varDesplazamiento);
   printf("\t\tEl mensaje descifrado es:  %s", cadenaDescifrada);
   
   return 0;
}