2012-07-31 30 views
0

以下是我的udp服務器和客戶端的部分代碼。 我不確定是否與UDP有關的問題是我的輸出很糟糕,但總是在第16個單詞中出現錯誤?使用UDP發送加密數據 - Openssl C++

define MAX_ENCRYPT_MSG_SIZE 16 

在服務器端:

char tempStr[MAX_ENCRYPT_MSG_SIZE]; 

/***** GET INPUT CODE HERE *****/ 

int tempLen = strlen(tempStr)+1; 

//encrypt msg 
ct = aes_encrypt(ci->getEVPCipherEN(),(unsigned char*) tempStr, &tempLen); 

//send msg 
rc = sendto(*(ci->getSd()), ct, tempLen, 0,(struct sockaddr *) ci->getCliAddr(),*(ci->getCliLen())); 

在客戶端:

int iLen = MAX_ENCRYPT_MSG_SIZE; 
char msg[MAX_ENCRYPT_MSG_SIZE]; 

n = recvfrom(*(ci->getSd()), msg, iLen, 0,(struct sockaddr *) ci->getCliAddr(),ci->getCliLen()); 

char pt[16]; 
char *plaintext = (char *)aes_decrypt(ci->getEVPCipherDE(),(unsigned char*) msg, &iLen); 
//convert back to only 16 bytes 
strcpy(pt,plaintext); 
if(plaintext == NULL) 
{ 
    std::cout << "Error" << std::endl; 
}  
else 
{ 
    std::cout << pt << std::flush; 
} 

輸出:

Sample out put of client side

在此先感謝! :)

回答

1

c字符串到底需要空字符爲空字節?是嗎?

+0

對不起,你可以進一步詳細說明嗎?我不太明白哪一部分是錯的。 – mister 2012-07-31 18:29:53

+1

你確定你有數組中0字節的空間,這是需要在c中終止基於char數組的字符串嗎? – 2012-07-31 18:32:48

+1

您是否正在提供iLen解密,而不是實際收到的數據大小? – 2012-07-31 18:34:03