当下面的函数在Qt Creator
上运行时,我收到以下错误/ home / zero / build-EncryptionTask2-Desktop_Qt_5_7_0_GCC_64bit-Debug / EncryptionTask2崩溃。
我认为它来自转换为QByteArray
数据类型
QByteArray encryotionProgress(QByteArray d_input)
{
//QByteArray d_output;
params->key = key;
params->iv = iv;
/* Indicate that we want to encrypt */
params->encrypt = 1;
/* Set the cipher type you want for encryption-decryption */
params->cipher_type = EVP_aes_256_cbc();
/* Encrypt the given file */
unsigned char *enc_out;
AES_set_encrypt_key( params->key, 256, &enc_key);
AES_encrypt((unsigned char*)(d_input.data()), enc_out, &enc_key);
QByteArray d_output((char*)enc_out);//convert back to qbyte array
return d_output;
}
答案 0 :(得分:0)
在传递给函数enc_out
之前,必须将内存分配给AES_encrypt
。
首先,获取输出缓冲区的大小:
const int n = sizeof(unsigned char) * ((d_input.length() + AES_BLOCK_SIZE) / AES_BLOCK_SIZE) * AES_BLOCK_SIZE;
然后使用以下任一方式将内存分配给enc_out
:
C ++风格的动态内存分配:
unsigned char* enc_out = new unsigned char[n];
C风格动态内存分配:
unsigned char* enc_out = (unsigned char *) malloc (n);
注意:使用后,请不要忘记分配给free
的{{1}}或delete[]
内存。
堆叠内存分配:
enc_out
我希望它有所帮助。