通过套接字发送RSA公钥

时间:2012-08-24 10:01:43

标签: c unix openssl rsa

我在客户端/服务器应用程序上使用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)。 怎么了?

1 个答案:

答案 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);