Pergunta

Eu tenho o seguinte 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;

O depurador está me dizendo que eu tenho um problema "Violação de acesso de escrita local" na linha

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

Se eu comentar essa linha a questão apenas se move para baixo para

BN_bn2bin(rsa->n, key);

quaisquer sugestões sobre como corrigir esse problema seria ótimo.

Foi útil?

Solução

Desde key não está apontando para qualquer coisa e você ter referenciado com subscrito notação de matriz, que é a fonte. Como a chave de obter o valor. Está a substituir ou pisando em algum outro bloco de memória que não é seu, portanto, o 'Acesso violação', como preso nas janelas. Verifique o seu código e certifique-se de que a variável tem sido malloc ou new'd.

Como uma nota lateral, é melhor para a sua sanidade declará-la como esta

unsigned char *key = NULL;

Dessa forma, se você tentar key acesso sem que seja malloc / new'd, você receberá um erro de exceção de memória (que pode ser facilmente pregado para baixo a este). Considere isso torna a depuração muito mais fácil.

Espero que isso ajude, Cumprimentos, Tom.

Outras dicas

Você tem uma violação de acesso porque você tentar Atribuição de chave com o terminador nulo, mas você não alocou qualquer memória de chave. Precisaríamos saber o que você está tentando realizar.

Você não está alocando qualquer memória para a chave -. A primeira vez que ele é usado é quando você tentar definir um elemento a 0

A solução correta para alocar a quantidade certa de memória neste caso é:

key = malloc(BN_num_bytes(rsa->n));
BN_bn2bin(rsa->n, key);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top