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