C OpenSSL RSA-2048未加密块的长度超出了其应有的长度

C OpenSSL RSA-2048未加密块的长度超出了其应有的长度,c,encryption,cryptography,openssl,rsa,C,Encryption,Cryptography,Openssl,Rsa,我使用OpenSSL库来加密和解密字符串。这样做的同时,我能够成功地加密字符串并存储它。当我试图解密这个时,我遇到了一个问题 我试图加密和解密的字符串包含在常量unsigned char Text[8]中。字符串长度为8个字符。所以我毫不费力地对它进行了加密,但是当我解密函数并尝试将解密后的字符串输出到一个char数组中时,它比应该的长度要长。我的意思是,例如,我尝试将解密的字符串输出到一个变量中,如下所示: char *DecryptedString = (char *) Global

我使用OpenSSL库来加密和解密字符串。这样做的同时,我能够成功地加密字符串并存储它。当我试图解密这个时,我遇到了一个问题

我试图加密和解密的字符串包含在
常量unsigned char Text[8]
中。字符串长度为8个字符。所以我毫不费力地对它进行了加密,但是当我解密函数并尝试将解密后的字符串输出到一个char数组中时,它比应该的长度要长。我的意思是,例如,我尝试将解密的字符串输出到一个变量中,如下所示:

char *DecryptedString = (char *)
    GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, strlen(Text));
我解密并输出到它,当我
printf DecryptedString
时,我得到了正确的前8个字符,但后面还有3个字符。因此,如果原始字符串是strlen()为8的
“2js84js8”
,则打印时
DecryptedString
的输出将是
“2js84js8”╝Γ1“
,strlen()值为11

我甚至尝试手动限制DecryptedString的长度,将strlen(Text)替换为9(空终止符额外增加一个),得到了相同的结果

我之所以将GlobalAlloc与
GMEM_FIXED | GMEM_zeronit
一起使用,是因为有人告诉我,将内存归零可以解决我的问题,但这并没有奏效。我正在使用OpenSSL的标准RSA加密和解密功能(
RSA\u public\u encrypt
&
RSA\u private\u decrypt
,我或多或少地遵循了这一点)。有人知道是什么导致了这个问题或者我做错了什么吗

编辑:下面是我遇到的问题的一个示例,具体代码(:)。顺便说一句,我排除了openssl内容的包含:

int main()
{


}现在一切正常。我能够通过将分配给解密字符串的内存大小增加到strlen(TestString)+1来解决这个问题,以便存储一个空终止符。我的猜测是,当我在以前的分配大小中没有足够的空间时,相邻的RAM泄漏了进来。我希望这能帮助其他对这类事情有疑问的人。谢谢。

在最短的、自包含的、可编译的、最重要的是可重现问题的样本中,发布您用于加密和解密的实际代码。我怀疑这是由于加密端的大小不正确,和/或没有考虑填充,但没有纯粹是推测的实际代码。请参阅WhozCraig建议的关于如何生成示例的指导。您应该能够接受自己的答案,这将帮助人们回答未回答的问题。哦,我明白了,是我干的。谢谢
char TestString[] = "d7f3h47k"; // 8 long obviously
RSA *RSAKey = RSA_generate_key(2048, 3, NULL, NULL);

char *EncryptedData = (char *)malloc(RSA_size(RSAKey));
int EncryptLength;

if ((EncryptLength = RSA_public_encrypt(strlen(TestString), (unsigned char *)TestString, (unsigned char *)EncryptedData, RSAKey, RSA_PKCS1_OAEP_PADDING)) == -1) {
    printf("Failed encrypt.");
    getchar();

    return 1;
}

char *DecryptedData = (char *)malloc(strlen(TestString));
if (RSA_private_decrypt(EncryptLength, (unsigned char *)EncryptedData, (unsigned char *)DecryptedData, RSAKey, RSA_PKCS1_OAEP_PADDING) == -1) {
    printf("Failed decrypt.");
    getchar();

    return 1;
}

printf("Original data: %s \nLength of original string: %d \n", TestString, strlen(TestString));
printf("Encrypted data: %s \nLength of encrypted data: %d \n", EncryptedData, strlen(EncryptedData));
printf("Decrypted data: %s \nLength of decrypted data: %d \n", DecryptedData, strlen(DecryptedData));
getchar();

return 0;