C++ 使用UDP-Openssl c+发送加密数据+;

C++ 使用UDP-Openssl c+发送加密数据+;,c++,sockets,networking,openssl,C++,Sockets,Networking,Openssl,下面是我的udp服务器和客户端的部分代码。 我不确定我的输出是否是wierd的UDP问题,但总是在第16个字出现问题 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->getEVPC

下面是我的udp服务器和客户端的部分代码。 我不确定我的输出是否是wierd的UDP问题,但总是在第16个字出现问题

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;
}
int-iLen=MAX\u ENCRYPT\u MSG\u SIZE;
字符消息[最大加密消息大小];
n=recvfrom(*(ci->getSd()),msg,iLen,0,(struct sockaddr*)ci->getCliAddr(),ci->getCliLen());
char-pt[16];
char*明文=(char*)aes_decrypt(ci->getEVPCipherDE(),(unsigned char*)msg,&iLen);
//仅转换回16字节
strcpy(pt,纯文本);
if(纯文本==NULL)
{

std::coutc字符串最后需要空字节的空间吗?是这样吗?

对不起,请您进一步说明一下?我不太明白哪部分是错的。您确定数组中有0字节的空间吗?这是在c中终止基于字符数组的字符串所必需的?您也在向iLen提供解密,而不是实际的re收到的数据大小?对于您给tempLen+1的加密?顺便感谢您的帮助,所以您是说msg[MAX\u encrypt\u msg\u size]应该是msg[MAX\u encrypt\u msg\u size+1]?