Wenn ich das iv oder den Chiffretext durch manuelles Schreiben initialisiere (mit tatsächlichen Werten und nicht mit Nullen) :
Code: Select all
unsigned char iv[16] = {0x00, 0x00 ...};
unsigned char cipher[16] = {...};
Code: Select all
EVP_DecryptInit(ctx, EVP_aes_256_cbc(), key, iv));
EVP_DecryptUpdate(ctx, out, &len, cipher, 16); //out is declared as unsigned char out[2048]
Code: Select all
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));
Der einzige Unterschied in dieser .cpp-Datei besteht darin, dass anstelle der auto-Schlüsselwort Ich habe gerade den Cstring wie folgt generiert:
Code: Select all
const char *iv_cstring = "(24 char long iv)";
Ich weiß nicht, wie derselbe Code in einer Instanz funktioniert und in der anderen nicht.