Die B64-dekodierte Ausgabe kann bei der aes256cbc-Entschlüsselung nicht als IV/Chiffretext verwendet werden
Posted: 12 Jan 2025, 18:06
Ich kann die Ausgabe von EVP_DecodeBlock nicht als iv verwenden und den Chiffretext zur Entschlüsselung EVP_CIPHER_CTX verwenden.
Wenn ich das iv oder den Chiffretext durch manuelles Schreiben initialisiere (mit tatsächlichen Werten und nicht mit Nullen) :
und verwenden Sie sie als
Mit evp_decryptfinal kann ich das erforderliche Ergebnis erhalten. Wenn ich jedoch die iv und die Chiffre mit einer variablen Zeichenfolge wie folgt generiert habe:
Der EVP_DecryptFinal-Aufruf führt zu einem Fehler. Seltsamerweise funktioniert derselbe Code tatsächlich in einer anderen .cpp-Datei, wenn ich ihn manuell mit g++ kompiliere, aber er scheint in qt nicht zu funktionieren;
Der einzige Unterschied in dieser .cpp-Datei besteht darin, dass anstelle der auto-Schlüsselwort Ich habe gerade den Cstring wie folgt generiert:
aber selbst das funktioniert im QT-Code nicht. Ich habe auch die Hexadezimalzeichen in den Arrays gedruckt und sie stimmen mit dem überein, was benötigt wird.
Ich weiß nicht, wie derselbe Code in einer Instanz funktioniert und in der anderen nicht.
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.