Мне нужно зашифровать мои данные, поэтому я шифрую их с помощью AES. И я могу зашифровать короткие данные. Но мне нужно зашифровать длинные данные, они не могут работать. Что я могу сделать, чтобы исправить эту проблему. Это мой код.Как шифровать данные с помощью AES (openssl)?
#include "cooloi_aes.h"
CooloiAES::CooloiAES()
: MSG_LEN(0)
{
for(int i = 0; i < AES_BLOCK_SIZE; i++)
{
key[i] = 32 + i;
}
}
CooloiAES::~CooloiAES()
{
}
std::string CooloiAES::aes_encrypt(std::string msg)
{
int i = msg.size()/1024;
MSG_LEN = (i + 1) * 1024;
char in[MSG_LEN];
char out[MSG_LEN];
memset((char*)in,0,MSG_LEN);
memset((char*)out,0,MSG_LEN);
strncpy((char*)in,msg.c_str(),msg.size());
unsigned char iv[AES_BLOCK_SIZE];
for(int j = 0; j < AES_BLOCK_SIZE; ++j)
{
iv[j] = 0;
}
AES_KEY aes;
if(AES_set_encrypt_key((unsigned char*)key, 128, &aes) < 0)
{
return NULL;
}
int len = msg.size();
AES_cbc_encrypt((unsigned char*)in,(unsigned char*)out,len,&aes,iv,AES_ENCRYPT);
std::string encrypt_msg(&out[0],&out[MSG_LEN+16]);
std::cout << std::endl;
return encrypt_msg;
}
std::string CooloiAES::aes_decrypt(std::string msg)
{
MSG_LEN = msg.size();
char in[MSG_LEN];
char out[MSG_LEN+16];
memset((char*)in,0,MSG_LEN);
memset((char*)out,0,MSG_LEN+16);
strncpy((char*)in,msg.c_str(),msg.size());
std::cout << std::endl;
unsigned char iv[AES_BLOCK_SIZE];
for(int j = 0; j < AES_BLOCK_SIZE; ++j)
{
iv[j] = 0;
}
AES_KEY aes;
if(AES_set_decrypt_key((unsigned char*)key, 128, &aes) < 0)
{
return NULL;
}
int len = msg.size();
AES_cbc_encrypt((unsigned char*)in,(unsigned char*)out,len,&aes,iv,AES_DECRYPT);
std::string decrypt_msg = out;
return decrypt_msg;
}
Когда я шифрования данных, который имеет 96 байт, он будет failed.I получить эту ошибку "Terminate вызывается после метания экземпляра 'станд :: length_error' , что(): basic_string :: _ S_create ". Но я не думаю, что эта строка длиннее максимальной длины. И я не знаю, где это неправильно.
Я шифрую данные из 96 байтов, а затем я их расшифровываю, я получаю грязный код, поэтому я сказал, что он не может работать. – Nicholas
На самом деле, я не разбивал свои байты, я использую этот режим в первый раз, поэтому не знаю, что мне делать. – Nicholas
Вам это поможет? http://stackoverflow.com/questions/5132939/how-to-do-aes-decryption-using-openssl?rq=1 – Madness