В настоящее время я использую метод AES-CBC-256 для расшифровки простой тестовой строки, которая зашифрована тем же методом через php openssl. Точная ошибка, которую я получаю, выглядит следующим образом:
11324:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:.\crypto\evp\evp_enc.c:531:
Код, используемый для расшифровки, следующий:
void handleErrors(void)
{
ERR_print_errors_fp(stderr);
abort();
}
int decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key, unsigned char *iv, unsigned char *plaintext)
{
EVP_CIPHER_CTX *ctx;
int len;
int plaintext_len;
if (!(ctx = EVP_CIPHER_CTX_new())) handleErrors();
if (1 != EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))
handleErrors();
if (1 != EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len))
handleErrors();
plaintext_len = len;
if (1 != EVP_DecryptFinal_ex(ctx, plaintext + len, &len)) handleErrors();
plaintext_len += len;
EVP_CIPHER_CTX_free(ctx);
return plaintext_len;
}
Я слышал, что это вызвано либо неправильным заполнением, либо попыткой расшифровать что-то, сгенерированное другой версией OpenSSL, поэтому я сохранил и 1.1.0h, и позволил OpenSSL использовать заполнение по умолчанию.
Я не думаю, что код дешифрования неправильный, так как он использовался для дешифрования файлов с соответствующим ключом и штрафом iv. Любая помощь приветствуется!