我使用这个简单的函数来解密AES加密的字符串
unsigned char *aes_decrypt(EVP_CIPHER_CTX *e, unsigned char *ciphertext, int *len)
{
int p_len = *len, f_len = 0;
unsigned char *plaintext = (unsigned char*)malloc(p_len + 128);
memset(plaintext,0,p_len);
EVP_DecryptInit_ex(e, NULL, NULL, NULL, NULL);
EVP_DecryptUpdate(e, plaintext, &p_len, ciphertext, *len);
EVP_DecryptFinal_ex(e, plaintext+p_len, &f_len);
*len = p_len + f_len;
return plaintext;
}
问题是len返回的值与整个解码字符串不匹配。有什么问题吗?
最佳答案
当你说“字符串”时,我假设你是指以零结尾的文本字符串。加密过程取决于密码块的大小,并且常常是填充。实际的编码和解码取决于应用程序。。。这都是密码的二进制数据。如果文本字符串小于解密过程返回的字符串,则应用程序需要确定有用的部分。例如,如果您知道结果中的字符串是以零结尾的,则可以通过简单的strlen获得长度。如果你不能保证输入的话,那当然是有风险的。。。最好在结果中搜索一个空值直到解码的长度。。。
关于c++ - OpenSSL解密的文本长度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12530612/