Cifrado Cesar en C

// autor @mikethegeek
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
//variable que almacenara la longitud de nuestro mensaje
int longitud=0;
//funcion que eliminara los espacios de nuestro mensaje
int quitarespacios(char *mensaje);
//funcion que realiza tranposicion inversa
int inversa(char *mensaje);
//funcion que realiza cifrado cesar
int cesar(char *mensaje);
//funcion que realiza tranposicion por grupos
int grupos(char *mensaje);

int main(){

int p=0;
//variable opcion para el menu
int op;
//variable que almacena el mensaje

char mensaje[50];

printf(“INTRODUCE MENSAJE A CIFRAR:\n”);
fgets(mensaje,50,stdin);
//sacamos la longitud -1 (sin el \0)
longitud=(strlen(mensaje))-1;
printf(“\nLA LONGITUD DEL MENSAJE ES %i\n\n”, longitud);
//escogemos opcion del menu
printf(“##### MENU ENCRIPTACION MIGUEL #####\n\n”);
printf(“1.- TRANSPOSICION INVERSA\n\n”);
printf(“2.- TRANSPOSICION POR GRUPOS\n\n”);
printf(“3.- CIFRADO CESAR\n\n”);
printf(“4.- SALIR\n\n”);
printf(“Introduce la opcion: “);
scanf(“%d”, &op);

printf(“\n\n\n”);

//OPCIONES DEL MENU
switch(op)
{
case 1: inversa(mensaje);break;
case 2: grupos(mensaje);break;
case 3: cesar(mensaje);break;
case 4: break;
}

return 0;
}
//##############OPCION 1 INVERSA###################
int inversa(char *mensaje){

printf(“\t ———————————\n”);
printf(“\t | Cifrado |\n “);
printf(“\t | TRANSPOSICION INVERSA |\n”);
printf(“\t ———————————\n\n”);

//sacamos mensaje introducido previamente
printf(“TU MENSAJE ES: %s\n”,mensaje);

int i, j, maximo;
char aux;

//sacamos la longitud de la cadena para poder ejecutar bucles

maximo=(strlen(mensaje))-1;
// printf(“%i\n”, maximo);

//QUITAMOS ESPACIOS————————————-

//bucle que vaya desde 0 hasta la posicion final

for(i=0; i<maximo; i++){

//si una posicion es un espacio
if(mensaje[i]==’ ‘){

//un bucle for que retrocederá una posicion cada uno de los valores, de este modo se lleva el espacio al final, despues del /0
for(j=i; j<maximo;j++){
mensaje[j]=mensaje[j+1];

}
}

}

// con un bucle for imprimimos al reves el resultado
printf(“MENSAJE CIFRADO:”);

for (i=0;i<=maximo;i++){
printf(“%c”, mensaje[maximo-i]);

}

getch();
return 0;
}

//##############FINAL TRANSPOSICION INVERSA###################
//##############OPCION 2 TRANSPOSICION POR GRUPOS ###################
int grupos(char *mensaje){

printf(“\t ———————————\n”);
printf(“\t | Cifrado |\n “);
printf(“\t | TRANSPOSICION POR GRUPOS |\n”);
printf(“\t ———————————\n\n”);
//————————QUITAMOS ESPACIOS————————————-

//bucle que vaya desde 0 hasta la posicion final
int i=0;
int j=0;
for(i=0; i<longitud; i++){

//si una posicion es un espacio
if(mensaje[i]==’ ‘){

//un bucle for que retrocederá una posicion cada uno de los valores, de este modo se lleva el espacio al final, despues del /0
for(j=i; j<longitud;j++){
mensaje[j]=mensaje[j+1];

}
}

}

//————————FIN QUITAR ESPACIOS————————————-

//————————AGRUPAMOS Y CIFRAMOS MENSAJE————————————-

//definimos char nuevo donde almacenaremos el mensaje cifrado
//definimos incremento m–> que sera la variable que aumentara el la posicion que del mensaje original para coger su valor
//definimos incremento m–> que sera la variable que aumentara el la posicion que del mensaje nuevo recibira un dato
char nuevo[50];
int incrementom=5;
int incrementon=6;

//bucle que recorra la cadena, y pase de 5 en 5
//cada vez que se ejecute llevara el valor de la posicion de mensaje a la de nuevo correspondiente

for(i=0; i<=longitud; i=i+5){
nuevo[0]=mensaje[4];
nuevo[1]=mensaje[3];
nuevo[2]=mensaje[1];
nuevo[3]=mensaje[0];
nuevo[4]=mensaje[2];
nuevo[5]=’ ‘;

//y cada vez que se ejecute, se sumara 6 a cada posicion para seguir el recorrido del primer bucle
// se sumara 5 a incrementom para seguir el ciclo de posiciones de las que vamos a coger los datos

for(j=i;j<=longitud;i=i+5){
nuevo[0+incrementon]=mensaje[4+incrementom];
nuevo[1+incrementon]=mensaje[3+incrementom];
nuevo[2+incrementon]=mensaje[1+incrementom];
nuevo[3+incrementon]=mensaje[0+incrementom];
nuevo[4+incrementon]=mensaje[2+incrementom];
nuevo[5+incrementon]=’ ‘;

incrementom=incrementom+5;
incrementon=incrementon+6;

j=j+5; //incrementamos j en 5
}

}

//imprimimos el mensaje cifrado
printf(“\n ~MENSAJE CIFRADO:~ \n\n %s”,nuevo);

getch();
return 0;
}
//##############FINAL TRANSPOSICION POR GRUPOS###################

//##############OPCION 3 CIFRADO CESAR###################
int cesar(char *mensaje){
printf(“\t ———————————\n”);
printf(“\t | Cifrado |\n “);
printf(“\t | TRANSPOSICION CESAR |\n”);
printf(“\t ———————————\n\n”);

int cesar;
int longitud;
int enasci;
int nuevaposi;
int max = 123;
int min = 97;
int diferenciasci;

//introducimos nº transposicion
printf(“introduce valor para el cifrado:”);
scanf(“%i”,&cesar);

//sacamos el mensaje virgen
printf(“%s\n”,mensaje);

//sacamos un caracter
printf(“%c \n”, mensaje[1]);

//enasci=mensaje[1];
//printf(“ESTO ES ASCIi %i\n\n”,enasci);

int i;
int j;

//sacamos la longitud de la cadena
longitud=(strlen(mensaje))-1;
//printf(“%i\n”, longitud);

//QUITAMOS ESPACIOS————————————-

//bucle que vaya desde 0 hasta la posicion final

for(i=0; i<longitud; i++){

//si una posicion es un espacio
if(mensaje[i]==’ ‘){

//un bucle for que retrocederá una posicion cada uno de los valores, de este modo se lleva el espacio al final, despues del /0
for(j=i; j<longitud;j++){
mensaje[j]=mensaje[j+1];

}
}

}
printf(“\nMENSAJE CIFRADO: \n\n”);

for(i=0;i<=longitud-1;i++){
//recogemos valor en ascii de la letra posicion

enasci=mensaje[i];
nuevaposi=mensaje[i]+cesar;
if((nuevaposi<=122)){

// y esa posicion tomará el valor del minimo 97 mas la diferencia anterior
mensaje[i]=nuevaposi;

//printf(“DIFERENCIASCI ES: %i\n”,diferenciasci);

}
if(nuevaposi>=max){

// printf(“EN ASCII SOY %i \n”, enasci);
// printf(“NUEVA POSICION %i\n”, nuevaposi);

diferenciasci=nuevaposi-max;
// printf(“LA DIFERENCIA ES %i\n”, diferenciasci);

mensaje[i]=(min+(diferenciasci));
//printf(“Y DESPUES EL PRIMER IF SOY %i\n”, mensaje[i]);

}
printf(“%c”,mensaje[i]);
}
printf(“\n\n”);

//imprimimos caracteres en ASCII para orientarnos
printf(“RESULTADO FINAL ASCII: \n”);
for(i=0;i<=longitud-1;i++){

printf(“%d”,mensaje[i]);

}
printf(“\n”);
getch();
return 0;
}