Autor
|
Tema: Como pasar una cadena char a hexadecimal por argumento a un constant char? (Leído 5,420 veces)
|
ahaugas
Desconectado
Mensajes: 70
|
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 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. 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: 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
Mensajes: 724
Intentando ser mejor cada día :)
|
No entiendo a que te refieres con una cadena constant char en forma hexadecimal. Quieres introducir esto: 0x53 0x54 0x55 ... ¿Y que el programa lo guarde en aesKey? O quieres introducir esto: ahagjh89875 Y que el programa lo guarde en aesKey. Una vez dicho eso para hacer lo último solo con hacer esto: #include<stdio.h> 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 }; int main (int argc, char*argv[]) { //Aqui se copia todo lo que hay en argv[1] a aesKey //Esto puedes obviarlo , es solo para mostrarlo por pantalla en formato hexadecimal. for(register int i = 0; i!=32;++i) { } return 0; }
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
Mensajes: 70
|
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. //*********** 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
Mensajes: 70
|
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 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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Como llenar un char desde el teclado
Programación C/C++
|
Dacan
|
8
|
4,604
|
23 Marzo 2013, 05:24 am
por rir3760
|
|
|
Pasar el nombre de una subrutina como argumento de una función?
.NET (C#, VB.NET, ASP)
|
Eleкtro
|
1
|
3,285
|
19 Abril 2013, 19:45 pm
por Eleкtro
|
|
|
Pasar matriz char a una función como referencia
Programación C/C++
|
KISKE
|
2
|
7,602
|
18 Junio 2013, 13:07 pm
por KISKE
|
|
|
Pasar tipo const char* a char
« 1 2 »
Programación C/C++
|
jorge_hura
|
15
|
11,243
|
25 Julio 2013, 09:50 am
por Eternal Idol
|
|
|
(Ayuda) Error al modificar el valor de un char en una cadena const char *
Programación C/C++
|
Seyro97
|
4
|
7,987
|
2 Julio 2015, 15:17 pm
por Seyro97
|
|