加密任务使用QT崩溃,Openssl我该怎么办?

时间:2018-03-22 12:49:35

标签: c++ qt encryption openssl ubuntu-14.04

当下面的函数在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;
 }

1 个答案:

答案 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

我希望它有所帮助。