//---------------------------------------------------------------------------
#include <iostream>
#include <cstdlib>
#include <fstream>
string CesarEncriptText(string entrada, int desplazamiento);
string CesarDecriptText(string entrada, int desplazamiento);
int CesarEncriptFile(char *nameFileIn, int desplazamiento, char *nameFileOut);
int CesarDecriptFile(char *nameFileIn, int desplazamiento, char *nameFileOut);
void OpcionEncriptFile();
void OpcionDecriptFile();
string Letras="ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz1234567890ÁÉÍÓÚáéíóúÜü \".,:;-+*/=\\_<>¡!¿?|@#$%&()[]{}\'^ºª";
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
char aux[1024];
string desencriptado;
string encriptado;
int op,salir=0,volver=0,rotacion;
do{
cout << "Cifrado/Descifrado Cesar" << endl;
cout << "------------------------" << endl;
cout << "1.Texto" << endl;
cout << "2.Archivo" << endl;
cout << "3.Salir" << endl;
cout << "Elige una opcion: ";
cin >> op;
cin.clear();
// Ignore to the end of file
//cin.ignore(std::numeric_limits<std::streamsize>::max());
// Ignore to the end of line
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
switch(op){
case 1:
do{
cout << "Cifrado/Descifrado de texto con cifrado Cesar" << endl;
cout << "---------------------------------------------" << endl;
cout << "1.Encriptar texto" << endl;
cout << "2.Desencriptar texto" << endl;
cout << "3.Volver" << endl;
cout << "Elige una opcion: ";
cin >> op;
cin.clear();
// Ignore to the end of line
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
switch(op){
case 1:
cout << "Introduce el texto a encriptar: ";
cin.getline(aux,1023,'\n');
desencriptado=aux;
cout << "Introduce el desplazamiento: ";
cin >> rotacion;
// Ignore to the end of line
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
if((encriptado=CesarEncriptText(desencriptado,rotacion)) != ""){
cout << "Encriptado finalizado satisfactoriamente" << endl;
cout << "Encriptado queda: " << encriptado << endl;
}else{
cout << "Caracteres no validos en el texto a encriptar" << endl;
}
cin.get();
break;
case 2:
cout << "Introduce el texto a desencriptar: ";
cin.getline(aux,1023,'\n');
encriptado=aux;
cout << "Introduce el desplazamiento: ";
cin >> rotacion;
// Ignore to the end of line
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
if((desencriptado=CesarDecriptText(encriptado,rotacion)) != ""){
cout << "Encriptado finalizado satisfactoriamente" << endl;
cout << "Desencriptado queda: " << desencriptado << endl;
}else{
cout << "Caracteres no validos en el texto a desencriptar" << endl;
}
cin.get();
break;
case 3:
volver=1;
break;
default:
cout << "Opcion no valida. Pulsa intro y vuelve a intentarlo" << endl;
cin.get();
}
}while(volver==0);
cin.get();
break;
case 2:
do{
cout << "Cifrado/Descifrado de archivo con cifrado Cesar" << endl;
cout << "-----------------------------------------------" << endl;
cout << "1.Encriptar archivo" << endl;
cout << "2.Desencriptar archivo" << endl;
cout << "3.Volver" << endl;
cout << "Elige una opcion: ";
cin >> op;
cin.clear();
// Ignore to the end of line
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
switch(op){
case 1:
OpcionEncriptFile();
cin.get();
break;
case 2:
OpcionDecriptFile();
cin.get();
break;
case 3:
volver=1;
break;
default:
cout << "Opcion no valida. Pulsa intro y vuelve a intentarlo" << endl;
cin.get();
}
}while(volver==0);
break;
case 3:
salir=1;
break;
default:
cout << "Opcion no valida" << endl;
}
}while(salir == 0);
return 0;
}