Pregunta

Tengo el siguiente código:

#include <openssl/bn.h>
#include <openssl/rsa.h>

unsigned char* key;
RSA* rsa = RSA_new();
rsa = RSA_generate_key(1024,65537,NULL,NULL);
//init pubkey
key[BN_num_bytes(rsa->n)] = '\0';
BN_bn2bin(rsa->n, key);
printf("RSA Pub: %s\n", key);
RSA_free( rsa );
rsa = NULL;

El depurador me está diciendo que tengo un problema "violación de acceso de localización de escritura" en la línea

key[BN_num_bytes(rsa->n)] = '\0';

Si comento que la línea del tema sólo se mueve hacia abajo a

BN_bn2bin(rsa->n, key);

alguna sugerencia sobre cómo solucionar este problema sería grande.

¿Fue útil?

Solución

Desde key no apunta a nada y se han referenciado con la notación de subíndice de matriz, que es la fuente. ¿Cómo obtener el valor clave. Va a sobrescribir o pisoteo en algún otro bloque de memoria que no es el suyo, por tanto, el 'Acceso violación' como atrapado por las ventanas. Revise su código y asegurarse de que la variable ha sido malloc'd o new'd.

Como nota al margen, es mejor para su salud mental es declarar como este

unsigned char *key = NULL;

De este modo si se intenta key acceso sin que se malloc'd / new'd, obtendrá un error de excepción de memoria (que puede ser fácilmente clavado a esto). Tenga en cuenta que hace la depuración mucho más fácil.

Espero que esta ayuda, Atentamente, Tom.

Otros consejos

Tiene una violación de acceso porque intenta asignar clave con el terminador nulo, pero no se ha asignado ninguna memoria para llave. Habría que saber lo que está tratando de lograr.

No se le cualquier reserva de memoria para la tecla -. La primera vez que se usa es cuando se intenta establecer un elemento a 0

La solución correcta para asignar la cantidad correcta de memoria en este caso es:

key = malloc(BN_num_bytes(rsa->n));
BN_bn2bin(rsa->n, key);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top