Я пытаюсь использовать механизм шифрования AES GCM, предоставляемый OpenSSL в C ++, и использую пример по этой ссылке в качестве ссылки:
https://wiki.openssl.org/index.php/EVP_Authenticated_Encryption_and_Decryption
Однако следующее утверждение дает мне ошибку:
/* Set IV length if default 12 bytes (96 bits) is not appropriate */
if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, 16, NULL))
handleErrors();
Я получаю ошибку:
ошибка: «EVP_CTRL_GCM_SET_IVLEN’ не была объявлена в этой области ».
Я не понимаю, почему я не могу установить IVLEN в 16 байтов? я не хочу
используйте значение по умолчанию 12 байтов. Любые указатели будут отличными.
Я решил ошибку. На самом деле, в примере кода порядок инициализации операции шифрования и установки длины IV следующий:
* Initialise the encryption operation. */
if(1 != EVP_EncryptInit_ex(ctx, EVP_aes_256_gcm(), NULL, NULL, NULL))
handleErrors();
/* Set IV length if default 12 bytes (96 bits) is not appropriate */
if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, 16, NULL))
handleErrors();
У меня был обратный порядок для этих утверждений, то есть сначала установка длины IV, а затем инициализация операции шифрования. Я думал, это были независимые шаги, и порядок не имел значения. Но, возможно, интерфейсу нужно знать, какой механизм шифрования он использует, прежде чем устанавливать какие-либо параметры.
Других решений пока нет …