Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ahaugas en 12 Enero 2013, 13:00 pm



Título: Como pasar una cadena char a hexadecimal por argumento a un constant char?
Publicado por: ahaugas en 12 Enero 2013, 13:00 pm
hola queria saber o si me pueden orientar a pasar una cadena char que obtengo desde un argumento a una cadena constant char en forma hexadecimal.

de c++ se bastante poco

lo que obtengo mediante un argumento
Código:
	unsigned char mensaje[32];
strncpy((char *) mensaje, argv[2], 32);

el constant char esta definido con una clave por defecto pero me gustaria sustituirlo por uno dinamico al obtener por el argumento citado arriba.

Código:
	unsigned char aesKey[32] = {
0x53, 0x28, 0x40, 0x6e, 0x2f, 0x64, 0x63, 0x5d, 0x2d, 0x61, 0x77, 0x40, 0x76, 0x71, 0x77, 0x28,
0x74, 0x61, 0x7d, 0x66, 0x61, 0x73, 0x3b, 0x5d, 0x66, 0x6d, 0x3c, 0x3f, 0x7b, 0x66, 0x72, 0x36
};

la idea es obtener:
Código:
	unsigned char mensaje[32];
strncpy((char *) mensaje, argv[2], 32);

unsigned char aesKey[32] = mensaje (hexadecimal);

gracias
si tienen alguna duda o correccion porfavor pregunten o hagan alguna sugerencia


Título: Re: Como pasar una cadena char a hexadecimal por argumento a un constant char?
Publicado por: avesudra en 12 Enero 2013, 14:15 pm
No entiendo a que te refieres con una cadena constant char en forma hexadecimal. Quieres introducir esto:
Código:
0x53 0x54 0x55 ...
¿Y que el programa lo guarde en aesKey? O quieres introducir esto:
Código:
ahagjh89875
Y que el programa lo guarde en aesKey.

Una vez dicho eso para hacer lo último solo con hacer esto:
Código
  1. #include<stdio.h>
  2. unsigned char aesKey[32] = {
  3. 0x53, 0x28, 0x40, 0x6e, 0x2f, 0x64, 0x63, 0x5d, 0x2d, 0x61, 0x77, 0x40, 0x76, 0x71, 0x77, 0x28,
  4. 0x74, 0x61, 0x7d, 0x66, 0x61, 0x73, 0x3b, 0x5d, 0x66, 0x6d, 0x3c, 0x3f, 0x7b, 0x66, 0x72, 0x36
  5. };
  6. int main (int argc, char*argv[])
  7. {
  8.  //Aqui se copia todo lo que hay en argv[1] a aesKey
  9.  memcpy(aesKey,argv[1],32);
  10.  //Esto puedes obviarlo , es solo para mostrarlo por pantalla en formato hexadecimal.
  11.  for(register int i = 0; i!=32;++i)
  12.  {
  13.      printf("0x%X ",aesKey[i]);
  14.  }
  15.  getchar();
  16.  return 0;
  17. }
Con este último código yo que tu tendría cuidado pues solo copia los carácteres que hay, pero si dejas esa por defecto, te va a sustituir los 4 o 5(el largo de lo que introduzcas) primeros pero no los demás hasta llegar hasta 32. Así que mi consejo es que si hay parámetros hagas esto pero antes inicialices a 0 todos los elementos de aesKey con un for o un while.
¡Un saludo!

PD: Perdon si no es lo que quieres  :-\


Título: Re: Como pasar una cadena char a hexadecimal por argumento a un constant char?
Publicado por: ahaugas en 13 Enero 2013, 04:49 am
bueno lo que quiero es que me lea la clave desde donde esta aesKey, en forma hexadecimal o en normal da igual. (la idea era hacerlo igual)

en forma estatica me lee la clave bien tanto para cifrar como descifrar, pero si lo pongo con un argumento para que sea dinamica al cifrar me lo cifra pero no descifra bien.

esto es lo que tengo, es mas o menos la instruccion mas completa no voy a poner todo por que ocupa como unas tres paginas y creo que con esto es suficiente.

segun las modificaciones que he hecho funciona a medias con tu ayuda, pero muchas gracias por tu esfuerzo.

Código:
	//*********** Check the arguments ************
if (argv[2] == NULL)
{
help();
return 0;
}
//******************************************************
puts("Desecriptando...");


//****************** AES decryption ********************
unsigned char aesKey[32];    // <----------------------|
//        |
//Aqui se copia todo lo que hay en argv[2] a aesKey ---|
memcpy(aesKey,argv[2],32);

unsigned char *buf;

aes256_context ctx;
aes256_init(&ctx, aesKey);

for (unsigned long i = 0; i < lSize/16; i++) {
buf = text + (i * 16);
aes256_decrypt_ecb(&ctx, buf);
}

aes256_done(&ctx);
//******************************************************


no sale del todo bien, y no se donde puede estar el fallo, si fuera php ya lo tendria resuelto.


Título: Re: Como pasar una cadena char a hexadecimal por argumento a un constant char?
Publicado por: ahaugas en 13 Enero 2013, 14:09 pm
bueno una parte ya esta solucionado, solo tengo que corregir un pequeño problemilla que me queda:

la encriptacion y desencriptacion funciona correctamente al pasar los argumentos, sin embargo solo lee las 2 primeras caracteres introducidas.

que puede estar fallando?
utilizo el argv[2], que es el argumento con el que opero la contraseña

Citar
   const int size = 32;
   unsigned char aesKey[size];
   char* p;

   for (int i = 1; i < argc || i < size; ++i)
   {
      aesKey = (unsigned char)strtol(argv[2], &p, 16);
   }

gracias