Когда я инициализирую iv или зашифрованный текст вручную (с фактическими значениями, а не 00) :
Код: Выделить всё
unsigned char iv[16] = {0x00, 0x00 ...};
unsigned char cipher[16] = {...};
Код: Выделить всё
EVP_DecryptInit(ctx, EVP_aes_256_cbc(), key, iv));
EVP_DecryptUpdate(ctx, out, &len, cipher, 16); //out is declared as unsigned char out[2048]
Код: Выделить всё
auto iv_stdstring = ((ciphers[i]["data"][j].toString()).split(".")[1]) //ciphers is a QJsonArray
.split("|")[0]
.toStdString();
auto iv_cstring = iv_stdstring.c_str();
unsigned char iv[16];
EVP_DecodeBlock(
iv, reinterpret_cast(const_cast(iv_cstring)),
strlen(iv_cstring));
Единственное отличие в этом файле .cpp заключается в том, что вместо использования Ключевое слово auto Я только что сгенерировал cstring следующим образом:
Код: Выделить всё
const char *iv_cstring = "(24 char long iv)";
Я очень не понимаю, как один и тот же код работает в одном случае, а не в другом.
Подробнее здесь: https://stackoverflow.com/questions/793 ... decryption