Bueno pues sigo trasteando con el tema del cifrado y ahora estoy con el cifrado Cesar y tengo esto:
Código PHP:
//---------------------------------------------------------------------------
#include <iostream>
using namespace std;
string CesarEncript(string entrada, int desplazamiento);
string CesarDecript(string entrada, int desplazamiento);
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
char aux[1024];
string desencriptado;
string encriptado;
cout << "Introduce el texto a encriptar: ";
cin.getline(aux,1023,'\n');
desencriptado=aux;
if((encriptado=CesarEncript(desencriptado,5)) != ""){
cout << encriptado << endl;
desencriptado="";
if((desencriptado =CesarDecript(encriptado,5)) != ""){
cout << desencriptado << endl;
}else{
cout << "Caracteres no validos en el texto a desencriptar" << endl;
}
}else{
cout << "Caracteres no validos en el texto a encriptar" << endl;
}
cin.get();
return 0;
}
//---------------------------------------------------------------------------
string CesarEncript(string texto, int desplazamiento)
{
int i,posInicial,posFinal;
string Letras="ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz1234567890ÁÉÍÓÚáéíóúÜü \".,:;-+*/=\\_<>¡!¿?|@#$%&()[]{}\'^ºª";
string final;
for(i=0;i<texto.length();i++){
posInicial = Letras.find(texto.at(i));
if(posInicial < 0){
final="";
break;
}
posFinal = (Letras.length() + posInicial + desplazamiento) % Letras.length();
final.append(Letras, posFinal, 1);
}
return final;
}
string CesarDecript(string texto, int desplazamiento)
{
int i,posInicial,posFinal;
string Letras="ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz1234567890ÁÉÍÓÚáéíóúÜü \".,:;-+*/=\\_<>¡!¿?|@#$%&()[]{}\'^ºª";
string final;
for(i=0;i<texto.length();i++){
posInicial = Letras.find(texto.at(i));
if(posInicial < 0){
final="";
break;
}
posFinal = (Letras.length() + posInicial - desplazamiento) % Letras.length();
final.append(Letras, posFinal, 1);
}
return final;
}
El problema que tengo es que hay caracteres que al usar find no los encuentra y creo que es porque al hacer cin.getline lee texto y no lee en binario. ¿por que creo esto? porque cuando estuve trasteando con el vigenese vi que al abrir el archivo en modo texto fallaba pero al abrirlo en modo binario funcionaba bien. ¿hay alguna manera de hacer que cin me lea el texto en binario? creo que con eso se solucionaria y he estado buscando info y lei que con cin.read se puede pero no encuentro ningun ejemplo que me permita leer del buffer de entrada con read. ¿podeis ayudarme?