Gracias, por las respuestas me pondré a ello entre hoy y mañana a ver si lo hago funcionar ya bien
. Si eso subiré los progresos actualizados.
Edito: La verdad no me parece buena idea hacer un vector de char, además eso sería muy raro, supongo que sería mejor usar char* ... etc. O hacer una funcion que cuente hasta el ultimo \0, no se ya lo pensaré
.
Saludos.
Edito: Al parecer no es cierto lo de string.length, acabo de hacer una comprobación.
Antes de cifrar la cadena mide 101 caracteres, y despues 120 (tras añadir los \0 hasta llegar a multiplo de 24) y ambas veces es medido por length, asi que no es cierto.
Por otro lado sigo en ello.
Creo que el error puede estar en que el archivo lo estoy leyendo en modo texto, en vez en modo binario pues al escribir la candena de 120 caracteres, luego me lee una de 82 que al descifrar da una de 96 porque la hago multiplo, pero desde el primer momento al releer el archivo para desencriptarlo deberían de salir los caracteres exactos de la cadena cuando escribi en el que son 120. Y sin \0 al menos 101.
string encriptar_primera(string entrada)
{
try
{
encriptador_1 oRijndael;
char *salida = new char[150]();
oRijndael.MakeKey(ENCLAVE_PRIMERA, encriptador_1::sm_chain0, 24, 24);
cout << "tam antes" << entrada.length() << endl;
while (entrada.length() % 24 != 0)
entrada += '\0';
cout << "tam despues" << entrada.length() << endl;
oRijndael.Encrypt(entrada.c_str(), salida, entrada.length(), encriptador_1::CBC);//falla encript
cout << "tam salida" << string(salida).length() << endl;
cout << ": " << salida << endl;
return string(salida);
}
catch (exception& roException)
{
return "";
}
}
string desencriptar_primera(string entrada)
{
try
{
encriptador_1 oRijndael;
char *salida = new char[150]();
oRijndael.MakeKey(ENCLAVE_PRIMERA, encriptador_1::sm_chain0, 24, 24);
cout << "tam entrada " << entrada.length() << endl;
while (entrada.length() % 24 != 0)
entrada += '\0';
oRijndael.Decrypt(entrada.c_str(), salida, entrada.length(), encriptador_1::CBC);
cout << "tam salida: " << string(salida).length() << endl;
cout << ": " << salida << endl;
return string(salida);
}
catch (exception& roException)
{
return "";
}
}
Salida:
CPcqGW51VRuFPRzAxwEM7mgF5BDu2xspuP4DtANxnyFtCn4jPKItqWCAdJn6QTMTgH0wSWCMQOKA3H6OxDNJOWH2PIWCy3k79QJw he leido 101
tam antes101
tam despues120
tam salida120
: ╣ܸ¾▀fºYb┼‗ $Û4░sÍSÑ█ñmÿ`╚XK¥8Q+òHZ;çfª?>¥YR┼öÏ+~$PÂ1û■Ë-í╩Ö×┼╣ç/┤âÀn¨\RR·7eü8MȨ╝¬i─ÛèuÙÏ ã¼ã«Xc╣
voy a escribir 120encriptadodesencriptando..he leido 82
tam entrada 82
tam salida: 96
: CPcqGW51VRuFPRzAxwEM7mgF5BDu2xspuP4DtANxnyFtCn4jPKItqWCAdJn6QTMTgH0wSWCM>▄n£¶°cN$│║©QF©
No entiendo porque escribo 120 caracteres en el archivo (cifrados) y luego al leer me salen que tengo 82, ¿alguien me podría decir porque?
Se verifica que el tamaño del archivo es de 120 bytes, el problema está en la posterior lectura del archivo.
Saludos.
Edito: Parece que el camino está por usar un vector char para leer todos los caracteres como muestra este hilo:
http://codereview.stackexchange.com/questions/22901/reading-all-bytes-from-a-fileTengo la función que permite leer todos los bytes del fichero y pasarlo a string, ahora si podríamos desencriptarlo:
string lee_fichero(string archivo)
{
string salida;
ifstream ifs(archivo.c_str(), ios::binary | ios::ate);
ifstream::pos_type pos = ifs.tellg();
vector<char> result(pos);
ifs.seekg(0, ios::beg);
ifs.read(&result[0], pos);
ifs.close();
for (int i = 0; i < result.size(); i++)
salida += result[i];
return salida;
}
THIS PROBLEM WAS SOLVEDCPcqGW51VRuFPRzAxwEM7mgF5BDu2xspuP4DtANxnyFtCn4jPKItqWCAdJn6QTMTgH0wSWCMQOKA3H6OxDNJOWH2PIWCy3k79QJw he leido 101
tam antes101
tam despues120
tam salida120
: ╣ܸ¾▀fºYb┼‗ $Û4░sÍSÑ█ñmÿ`╚XK¥8Q+òHZ;çfª?>¥YR┼öÏ+~$PÂ1û■Ë-í╩Ö×┼╣ç/┤âÀn¨\RR·7eü8MȨ╝¬i─ÛèuÙÏ ã¼ã«Xc╣
voy a escribir 120
╣ܸ¾▀fºYb┼‗ $Û4░sÍSÑ█ñmÿ`╚XK¥8Q+òHZ;çfª?>¥YR┼öÏ+~$PÂ1û■Ë-í╩Ö×┼╣ç/┤âÀn¨\RR·7eü8MȨ╝¬i─ÛèuÙÏ ã¼ã«Xc╣
encriptadodesencriptando..okhe leido 120
╣ܸ¾▀fºYb┼‗ $Û4░sÍSÑ█ñmÿ`╚XK¥8Q+òHZ;çfª?>¥YR┼öÏ+~$PÂ1û■Ë-í╩Ö×┼╣ç/┤âÀn¨\RR·7eü8MȨ╝¬i─ÛèuÙÏ ã¼ã«Xc╣
tam entrada 120
tam salida: 101
: CPcqGW51VRuFPRzAxwEM7mgF5BDu2xspuP4DtANxnyFtCn4jPKItqWCAdJn6QTMTgH0wSWCMQOKA3H6OxDNJOWH2PIWCy3k79QJw
Trabajando con un vector de char para leer el archivo que no parece a primeras buena idea, pero de primeras funciona, si encuentro algo mejor ya lo cambiare.
Saludos.