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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Como pasar una cadena char a hexadecimal por argumento a un constant char?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como pasar una cadena char a hexadecimal por argumento a un constant char?  (Leído 2,347 veces)
ahaugas

Desconectado Desconectado

Mensajes: 70



Ver Perfil
Como pasar una cadena char a hexadecimal por argumento a un constant char?
« 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


En línea

no subestimar al mas debil ya que tendra otras experiencias
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Como pasar una cadena char a hexadecimal por argumento a un constant char?
« Respuesta #1 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  :-\


« Última modificación: 12 Enero 2013, 14:18 pm por avesudra » En línea

Regístrate en
ahaugas

Desconectado Desconectado

Mensajes: 70



Ver Perfil
Re: Como pasar una cadena char a hexadecimal por argumento a un constant char?
« Respuesta #2 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.
« Última modificación: 13 Enero 2013, 04:51 am por ahaugas » En línea

no subestimar al mas debil ya que tendra otras experiencias
ahaugas

Desconectado Desconectado

Mensajes: 70



Ver Perfil
Re: Como pasar una cadena char a hexadecimal por argumento a un constant char?
« Respuesta #3 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
En línea

no subestimar al mas debil ya que tendra otras experiencias
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines