项目最近需要aes加密,在使用openssl类库加密后返回了vector,请问我该如何解析获得加密后的密文呢?
遍历vector以后获得字符串,在VS上显示是乱码。
代码如下:
std::vector<unsigned char> aes_128_gcm_encrypt(std::string plaintext, std::string key) {
size_t enc_length = plaintext.length() * 3;
std::vector<unsigned char> output;
output.resize(enc_length, '\0');
unsigned char tag[AES_BLOCK_SIZE];
unsigned char iv[AES_BLOCK_SIZE];
RAND_bytes(iv, sizeof(iv));
std::copy(iv, iv + 16, output.begin() + 16);
int actual_size = 0, final_size = 0;
EVP_CIPHER_CTX* e_ctx = EVP_CIPHER_CTX_new();
//EVP_CIPHER_CTX_ctrl(e_ctx, EVP_CTRL_GCM_SET_IVLEN, 16, NULL);
EVP_EncryptInit(e_ctx, EVP_aes_128_gcm(), (const unsigned char*)key.c_str(), iv);
EVP_EncryptUpdate(e_ctx, &output[32], &actual_size, (const unsigned char*)plaintext.data(), plaintext.length());
EVP_EncryptFinal(e_ctx, &output[32 + actual_size], &final_size);
EVP_CIPHER_CTX_ctrl(e_ctx, EVP_CTRL_GCM_GET_TAG, 16, tag);
std::copy(tag, tag + 16, output.begin());
std::copy(iv, iv + 16, output.begin() + 16);
output.resize(32 + actual_size + final_size);
EVP_CIPHER_CTX_free(e_ctx);
return output;
}