Domanda

Ho il seguente codice:

#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;

Il debugger mi sta dicendo che ho un problema di "Violazione di accesso scrittura posizione" sulla linea

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

Se io commento che la linea la questione si sposta solo fino a

BN_bn2bin(rsa->n, key);

qualche suggerimento su come risolvere questo problema sarebbe grande.

È stato utile?

Soluzione

Dato key non punta a nulla e vi hanno fatto riferimento con la notazione di matrice indice, che è la fonte. Come funziona chiave ottenere il valore. Stai sovrascrivendo o calpestando qualche altro blocco di memoria che non è tuo è qui il 'violazione di accesso', come chiusura di un finestrino. Doppia controllare il codice e fare in modo che la variabile è stata malloc'd o new'd.

Come nota a margine, è meglio per la vostra sanità mentale di dichiararla come questo

unsigned char *key = NULL;

In questo modo, se si tenta key accesso senza che sia malloc'd / new'd, si otterrà un errore di eccezione di memoria (che può essere facilmente inchiodato a questo). Si consideri rende il debugging molto più facile.

Spero che questo aiuti, I migliori saluti, Tom.

Altri suggerimenti

Hai una violazione di accesso perché si tenta di assegnare chiave con il terminatore null, ma non è stato assegnato alcun ricordo per la chiave. Avremmo bisogno di sapere cosa si sta cercando di realizzare.

Non assegnano la memoria per il tasto -. La prima volta che viene utilizzato è quando si tenta di impostare un elemento a 0

La soluzione corretta per allocare la giusta quantità di memoria in questo caso è:

key = malloc(BN_num_bytes(rsa->n));
BN_bn2bin(rsa->n, key);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top