elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error al en/descifrar string C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error al en/descifrar string C++  (Leído 651 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Error al en/descifrar string C++
« en: 2 Septiembre 2015, 02:24 am »

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
  1. encriptador_1 prueba;
  2. prueba.MakeKey(ENCLAVE_PRIMERA, encriptador_1::sm_chain0, 24, 24);
  3. string ***** = "wu1394yvh 1034y v180934ync89103y4 0813480ycn10384yn081n348401";
  4. char * salida = new char[*****.length()]();//length te da los bytes.
  5. cout << *****.length() << " " << strlen(*****.c_str()) << endl;
  6. while (*****.length() % 24 != 0)
  7. ***** += '\0';
  8.  
  9. cout << *****.length() << " " << strlen(*****.c_str()) << endl;
  10. prueba.Encrypt(*****.c_str(), salida, *****.length(), 0);
  11. cout << "entrada: " << ***** << endl;
  12. cout << "cifra: " << salida << endl;
  13. ***** = salida;
  14. strcpy(salida, "");
  15. while (*****.length() % 24 != 0)
  16. ***** += '\0';
  17. prueba.Decrypt(*****.c_str(), salida, *****.length(), 0);
  18. cout << "descifra: " << salida << endl;
  19. cout << "feliz";
  20. system("pause");

Salida:

Citar
61 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
  1. encriptador_1 prueba;
  2. prueba.MakeKey(ENCLAVE_PRIMERA, encriptador_1::sm_chain0, 24, 24);
  3. string ***** = "wu1394yvh1034y v180934ync89103y0 813480ycn10qwefq  384yn081n348401";
  4.  
  5. cout << *****.length() << " " << strlen(*****.c_str()) << endl;
  6. while (*****.length() % 24 != 0)
  7. ***** += '\0';
  8. char * salida = new char[*****.length()]();//length te da los bytes.
  9. cout << *****.length() << " " << strlen(*****.c_str()) << endl;
  10. prueba.Encrypt(*****.c_str(), salida, *****.length(), 0);
  11. cout << "entrada: " << ***** << endl;
  12. cout << "cifra: " << salida << endl;
  13. ***** = salida;
  14. strcpy(salida, "");
  15. cout << *****.length() << endl;
  16. while (*****.length() % 24 != 0)
  17. ***** += '\0';
  18. salida = new char[*****.length()]();
  19. prueba.Decrypt(*****.c_str(), salida, *****.length(), 0);
  20. cout << "descifra: " << salida << endl;
  21. cout << "feliz";
  22. system("pause");

Working fine muak mk, Kaxperday


« Última modificación: 2 Septiembre 2015, 02:31 am por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error descifrar claves WAP2
Wireless en Linux
usuario999 2 2,952 Último mensaje 2 Febrero 2011, 21:32 pm
por usuario999
error aircrack descifrar ivs
Wireless en Windows
florenperz 1 3,217 Último mensaje 17 Agosto 2011, 20:48 pm
por longits
[Solucionado]Duda descifrar una string
Dudas Generales
Anonymous250 0 1,833 Último mensaje 6 Marzo 2012, 15:07 pm
por Anonymous250
[C] Error Conversión String to Char
Programación C/C++
MeCraniDOS 3 2,092 Último mensaje 31 Marzo 2013, 18:31 pm
por avesudra
Error en lectura de datos con String y Int
Java
Chentul 1 921 Último mensaje 4 Mayo 2014, 10:46 am
por Zoik
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines