#include <ctype.h> // toupper()
#include <stdio.h> // printf(), fgets()
#include <string.h> // strcspn(), strlen()
enum {
CLAVE = 5,
CODS_SIZE = 26,
ESPACIO = 32,
CODS_INI = 65,
BUFF_SIZE = 128
};
int main(void) {
char msjCifrado[BUFF_SIZE] = { 0 };
int codigosBase[CODS_SIZE] = { 0 };
int codigosNuevos[CODS_SIZE] = { 0 };
size_t msjSize;
printf("Ingrese el mensaje cifrado: ");
(void) fgets(msjCifrado, BUFF_SIZE, stdin);
msjCifrado[strcspn(msjCifrado, "\r\n")] = '\0';
for (int i = 0; i < CODS_SIZE; ++i) {
codigosBase[i] = CODS_INI + i;
codigosNuevos[i] = codigosBase[i];
}
for (int cont = 0; cont < CLAVE; ++cont) {
const int temp = codigosNuevos[CODS_SIZE - 1];
for(int i = CODS_SIZE - 1; i > 0; --i) {
codigosNuevos[i] = codigosNuevos[i - 1];
}
codigosNuevos[0] = temp;
}
printf("El texto plano es --------> ");
msjSize = strlen(msjCifrado);
for (size_t i = 0; i < msjSize; ++i) {
if (msjCifrado[i] == ESPACIO) {
printf("%c", ESPACIO);
}
for (size_t j = 0; j < CODS_SIZE; ++j) {
if (toupper(msjCifrado[i]) == codigosBase[j]) {
printf("%c", codigosNuevos[j]);
}
}
}
printf("\n");
return 0;
}