Descifrar cadena mediante codificación César en C


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

#define MAX_CARACTERES 100

void codificar(char * mensaje, char *codigo,  int clave);

void descodificar(char * mensaje, char *codigo,  int clave);

int main()
{

char frase[MAX_CARACTERES];
char fraseCodificada[MAX_CARACTERES];
int clave,modo;

printf("CIFRAR/DESCIFRAR UNA CADENA MEDIANTE LA CODIFICACIÓN CÉSAR\n\n");
printf("Introduzca una cadena de caracteres: \n");
scanf("%s",frase);
printf("%s\n",frase);
printf("Introduzca la clave de cifrado (positiva): \n");
scanf("%d",&clave);
printf("%d\n",clave);

printf("¿qué operación desea realizar? codificar (0) / descodificar (1)\n");
scanf("%d",&modo);

if (modo == 0){
codificar(frase,fraseCodificada,clave);
printf("\nResultado de codificar %s es: %s\n",frase,fraseCodificada);
}else if (modo == 1){
descodificar(frase,fraseCodificada,clave);
printf("\nResultado de descodificar %s es: %s\n",frase,fraseCodificada);
}

return 0;

}

void codificar(char * mensaje, char *codigo,  int clave)
{
int i;
int n_letras;

strcpy(codigo,mensaje);
n_letras = 'z'-'a'+1;

i=0;
while(mensaje[i]!='\0'){
if (mensaje[i]>='a' && mensaje[i]<='z')
codigo[i]= 'a' + (mensaje[i]+clave -'a') % n_letras;
else if (mensaje[i]>='A' && mensaje[i]<='Z')
codigo[i]= 'A' + (mensaje[i]+clave -'A') % n_letras;
i++;
}
codigo[i]='\0';

}

void descodificar(char * mensaje, char *codigo,  int clave)
{
int i;
int n_letras;

strcpy(codigo,mensaje);
n_letras = 'z'-'a'+1;

i=0;
while(mensaje[i]!='\0'){
if (mensaje[i]>='a' && mensaje[i]<='z')
codigo[i]= 'a' + (mensaje[i]-clave -'a' + n_letras) % n_letras;
else if (mensaje[i]>='A' && mensaje[i]<='Z')
codigo[i]= 'A' + (mensaje[i]-clave -'A' + n_letras) % n_letras;
i++;
}
codigo[i]='\0';

}