Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Kaxperday

#351
Bueno, para acabar la noche escribo este post.

Miren tengo un archivo que divido en campos con delimitadires, escribo cadenas encriptadas en cada campo. El problema es que luego al obtener esas cadenas no las recojo correctamente, creo que es porque uso string en vez de char o no sé.

Lo leo todo su contenido así:

Código (cpp) [Seleccionar]
string almacen::obtener_campo(int campo)
{
ifstream archivo;
archivo.open(directorio, ifstream::in);
if (!archivo)
return "";
else{
string contenido;
while (archivo.good())
contenido += archivo.get();
archivo.clear();
archivo.close();
}


Me dice que tiene lo siguiente:

CitarCPcqGW51VRuFPRzAxwEMholaaaaaaaaque haaceess maripooossssssssssa7mgF5BDu2xspuP4DtANxO■¦©^×{oT╗┐Gç_÷SÆs
È~©BüQ³f5Ä{░µ ðø¥¹Q:╗\‗Y╚§.áë╔¾¶ÈÙ│Ï,jI¸Ñ°┴!▀Òs

Pero el archivo con el bloc de notas muestra lo siguiente:

CitarCPcqGW51VRuFPRzAxwEMholaaaaaaaaque haaceess maripooossssssssssa7mgF5BDu2xspuP4DtANxOþݸ^ž{oT»¿G‡_öS's
¢&H‹>VßnÎÀeØo®QNЛ¾ûQ:»\òYÈõ. ‰ÉóôÔë³Ø,jI÷¥øÁ!ßãs
Ô¶~¸BQüf5Ž{°æÔ;pÉE^ª•€UÏ·Ù¹ÒÛŒM™ÈuUÌvýýýý^ÿ^ÿnyFtCn4jPKItqWCAdJn6QTMTgH0wSWCMQOKA3H6OxDNJOWH2PIWCy3k79QJwÿ

¿Porque no accedo a todos los datos? ¿acaso no puedo obtener todos los caracteres con ifstream.get()? ¿qué solución puedo dar?

Saludos y gracias.

Edito: Sin embargo caracteres alfanumericos los lee sin problemas, pero los raros no.. ¿ que son ? xd

Edito: Acabo de abrirlo en binario || fstream::binary  y el resultado ha sido el mismo.
#352
Bueeeno, resulta que me resistía a crear este hilo, pero no me queda otro remedio tras horas de frustración.

Tengo una clase que saque del Rijandel a través de su code source de codeproyect.

Esa clase en mi proyecto se llama "encriptador_1". Y bien creo una clave de 24 caracteres, ahora tengo que cifrar en bloque pues venga que comience la fiesta.

Código (cpp) [Seleccionar]
encriptador_1 prueba;
prueba.MakeKey(ENCLAVE_PRIMERA, encriptador_1::sm_chain0, 24, 24);
string ***** = "wu1394yvh 1034y v180934ync89103y4 0813480ycn10384yn081n348401";
char * salida = new char[*****.length()]();//length te da los bytes.
cout << *****.length() << " " << strlen(*****.c_str()) << endl;
while (*****.length() % 24 != 0)
***** += '\0';

cout << *****.length() << " " << strlen(*****.c_str()) << endl;
prueba.Encrypt(*****.c_str(), salida, *****.length(), 0);
cout << "entrada: " << ***** << endl;
cout << "cifra: " << salida << endl;
***** = salida;
strcpy(salida, "");
while (*****.length() % 24 != 0)
***** += '\0';
prueba.Decrypt(*****.c_str(), salida, *****.length(), 0);
cout << "descifra: " << salida << endl;
cout << "feliz";
system("pause");


Salida:

Citar61 61
72 61
entrada: wu1394yvh 1034y v180934ync89103y4 0813480ycn10384yn081n348401          
cifra: ÃÅäþ̵=C¾
descifra: 8╝
Ï┤─¸K{ç§░lI┐Ò┬ä%+2¨Ò▄┘f«ð¹º»½h
pUq@ôMä°BÛ¤§p1ê­¡┐e┐È╩µÒ¥Q▓UGø°±{!9¹L
felizPresione una tecla para continuar . . .

He de decir que me he dado cuenta que string.legth() devuelve caracteres incluyendo \0 en la string y strlen() solo hasta el primer \0.

Como se puede observar no cifra correctamente, antes lo hice funcionar pero me daba error en el system("pause"), omg. Algo casca por ahí.

Cojo una cadena la añados \0 hasta hacerla múltiplo, luego llamo a Riyandel.Encrypt(), y le paso un puntero char* del que he reservado memoria igual al tamaño de la cadena a cifrar, ese puntero tras llamada al método contiene la cadena cifrada.

Esa cadena la paso a la string y repito el proceso.

¿Qué hago mal?

Saludos.

Edito: Por favor basta de banear la palabra mierd.a es muy usada en la comunidad, de hecho es la palabra que se me banea en el código #FREEMIERDA.

Por cierto he reducido la cadena y he eliminado los espacios y me funciona (sale la cadena descifrada correctamente) pero el programa casca, al depurar dice que es el system("pause") pero creo que es algo de overflow.

Saludos.

EDICION DELICATESSE: solucionado rigth now, habia un overflow en el puntero, necesitaba mas memoria pues la cadena desenciptada tenía mas caracteres de los que podia abarcar el puntero.

Código (cpp) [Seleccionar]
encriptador_1 prueba;
prueba.MakeKey(ENCLAVE_PRIMERA, encriptador_1::sm_chain0, 24, 24);
string ***** = "wu1394yvh1034y v180934ync89103y0 813480ycn10qwefq  384yn081n348401";

cout << *****.length() << " " << strlen(*****.c_str()) << endl;
while (*****.length() % 24 != 0)
***** += '\0';
char * salida = new char[*****.length()]();//length te da los bytes.
cout << *****.length() << " " << strlen(*****.c_str()) << endl;
prueba.Encrypt(*****.c_str(), salida, *****.length(), 0);
cout << "entrada: " << ***** << endl;
cout << "cifra: " << salida << endl;
***** = salida;
strcpy(salida, "");
cout << *****.length() << endl;
while (*****.length() % 24 != 0)
***** += '\0';
salida = new char[*****.length()]();
prueba.Decrypt(*****.c_str(), salida, *****.length(), 0);
cout << "descifra: " << salida << endl;
cout << "feliz";
system("pause");


Working fine muak mk, Kaxperday
#353
.NET (C#, VB.NET, ASP) / Re: Travian bot en C#
28 Agosto 2015, 16:30 PM
No he oído hablar de ello, pero es bastante fácil hacerlo con C# sin necesidad de usar programas ajenos, además al programarlo tu, puedes meter lo que quieras, es la gracia que tiene XP, también puedo usar un bot que ya existe para travian jaja.

Una cosilla, no encuentro la manera de webscrapear la lista de servidores desde los cuales hacer el LOGIN, pues se muestran en un popup al pulsar login en la página principal, travian.net, ¿alguien sabe como puedo hacerlo?.

Saludos.
#354
.NET (C#, VB.NET, ASP) / Travian bot en C#
28 Agosto 2015, 16:21 PM
¿Alguien se anima a algo de diversión?.

Postead aquí si os interesa o mandadme MP.

Algo en plan que ataque todo el rato a jugadores de menos de 50 habs :).

Saludos.

Edito: Ya inicia sesión, he creado cuenta y estoy construyendo cosas para poder crear tropas y atacar con el bot :) jajaja.
#355
Sí merece la pena, es C mejorado. Gracias a sus clases y métodos, ahorras mucho código que en C deberías de implementar mediante estructuras y funciones, también es más fácil trabajar dináminamente con la memoria en C++, yo sabía C, pero si realmente vas a programar mucho en C o C++ te recomiendo pasar a C++, porque ahorrarás tiempo y tu código quedará más reducido.

Saludos.
#356
Programación C/C++ / Re: Detener thread en C++
24 Agosto 2015, 14:08 PM
Gracias socio, problema resuelto.

Luego para salir del bucle sería con el asterisco:

Código (cpp) [Seleccionar]
while(*on){..}

Saludos y gracias.  :) ;)
#357
 :-( :-(

¬¬
#358
Programación C/C++ / Detener thread en C++
24 Agosto 2015, 10:58 AM
Hola, antes de meterme en Mutex etc, quería saber si se puede detener de esta manera un thread en C++, o apartir de una funcion externa que busque un valor la devuelva, y apartir de ese nuevo valor, haga false la condicion de bucle del thread y salga de este.

Probé con un volatile bool y con una variable global pasandola como argumento a la funcion del thread, pero creo que una vez pasada como argumento la funcion la trata como variable estática, luego si la cambio en otra parte del código no influye en el valor de la función del thread.

Código (cpp) [Seleccionar]
bool on = true;
thread ok(trabaja, on, a);//hay que pasarle el bool a través de una funcion
system("pause");
on=false;
ok.get();
cout << "yano hay thread!!";


Código (cpp) [Seleccionar]
trabaja (bool on, string a)
{
while(on){
/...
}
}

Visto que eso no funciona, pensé en crear una función que busque el valor externo y lo devuelva, pero a primeras no se me ocurre nada, seguiré pensando en ello.

Y sino con mutex como se podría hacer?

Saludos.
#359
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.  ;D

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é :P.

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.

Código (cpp) [Seleccionar]
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:

CitarCPcqGW51VRuFPRzAxwEM7mgF5BDu2xspuP4DtANxnyFtCn4jPKItqWCAdJn6QTMTgH0wSWCMQOKA3H6OxDNJOWH2PIWCy3k79QJw he leido 101
tam antes101
tam despues120
tam salida120
: ╣ܸ¾▀fºYb┼‗  $Û4░sÍSÑ█ñmÿ`╚XK¥8­Q+ò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-file

Tengo la función que permite leer todos los bytes del fichero y pasarlo a string, ahora si podríamos desencriptarlo:

Código (cpp) [Seleccionar]
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 SOLVED

CitarCPcqGW51VRuFPRzAxwEM7mgF5BDu2xspuP4DtANxnyFtCn4jPKItqWCAdJn6QTMTgH0wSWCMQOKA3H6OxDNJOWH2PIWCy3k79QJw he leido 101
tam antes101
tam despues120
tam salida120
: ╣ܸ¾▀fºYb┼‗  $Û4░sÍSÑ█ñmÿ`╚XK¥8­Q+òHZ;çfª?>¥YR┼öÏ+~$PÂ1û■Ë-í╩Ö×┼╣ç/┤âÀn¨\RR·7eü8MȨ╝¬i─ÛèuÙÏ  ã¼ã«Xc╣
voy a escribir 120
╣ܸ¾▀fºYb┼‗    $Û4░sÍSÑ█ñmÿ`╚XK¥8­Q+òHZ;çfª?>¥YR┼öÏ+~$PÂ1û■Ë-í╩Ö×┼╣ç/┤âÀn¨\RR·7eü8MȨ╝¬i─ÛèuÙÏ  ã¼ã«Xc╣
encriptadodesencriptando..okhe leido 120
╣ܸ¾▀fºYb┼‗    $Û4░sÍSÑ█ñmÿ`╚XK¥8­Q+ò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.
#360
Está noche las coreas no dormirán. Ya me puedo imaginar la reunión:

- ¿Van a quitar los altavoces?.
- No.
- (A movilizar la flota).

Es hora de que acaben con el gordito loco norcoreano, por hacer un favor a la humanidad entera. No entiendo como la gente le lame el culo y le apoya en todo.

Aquí en España hubo persecución y represión del régimen franquista, pero siempre había opositores al régimen, anarquistas de MLE-CNT, la ETA, los GRAPO. (Que trataron de acabar con el).

Había gente que quería acabar con aquello y luchaba, daba su vida por cambiarlo. Ya vemos que los norcoreanos no solo tienen la picha corta literalmente, sino también en sentido figurado, porque todavía no parece que se hayan reunido ni unos pocos para acabar con el régimen, se limitan a agachar la cabeza y tragarselo. Y sino que alguien me ponga una noticia o algo de norcoreanos tratando de tumbar el régimen o algo, sino lo hacen será porque son masocas, porque no es que su líder les trate muy bien.

A ver si le abren bien el culo los de USA y acaba en Guantánamo.  >:D >:D >:D

Saludos.