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;
}