我在客户端/服务器应用程序上使用openssl库,我需要与客户端共享公钥。 这是数据包的结构:
typedef struct pack {
char op[10];
char message[1024];
int id;
}packet;
这就是提取公钥并将其放在消息字段中的方法:
packet *send_pack
RSA *rsa,
const unsigned char *my_public_key;
my_public_key = malloc(1024);
send_pack = (packet*) malloc(sizeof (packet));
rsa = RSA_new();
rsa = RSA_generate_key(1024, 17, NULL, NULL);
i2d_RSAPublicKey(rsa, &my_public_key);
printf("my public key: %X\n", (unsigned int)my_public_key);
strcpy(send_pack->message, my_public_key);
printf("field message of send pack %X", (unsigned int)send_pack->message );
...
但两个printf打印两个相似的值,但不一样(例如第一个printf返回A0B9092和第二个A0B944)。 怎么了?
答案 0 :(得分:1)
有很多问题:
strcpy
期望以0结尾的字符串对于第一个问题,您应该注意i2d_RSAPublicKey
返回您忽略的长度。所以你应该打印:
int len = i2d_RSAPublicKey(...);
for (i = 0; i < len; i++)
printf("%02x", my_public_key[i]);
对于第二部分,请改用memcpy
:
memcpy(send_pack->message, my_public_key, len);