2012-08-24 55 views
-1

我在客戶端/服務器應用程序上使用openssl庫,我需要與客戶端共享公鑰。 這是包的結構:通過套接字發送RSA公鑰

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

有趣的是指出你還在打印鍵錯誤,你得到的回答昨日HTTP後:// stackoverflow.com/questions/12096825/print-on-stdout-rsa-public-key-using-openssl – cnicutar

+0

ops,我貼了打印代碼的錯誤版本! – giozh

回答

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