2016-08-22 18 views
-1

Я пытаюсь использовать AES GCM механизм шифрования, предоставленный OpenSSL в C++ и с использованием, например, на этой ссылке в качестве ссылки: https://wiki.openssl.org/index.php/EVP_Authenticated_Encryption_and_DecryptionНевозможно установить IV для AES GCM с помощью OpenSSL

Однако следующее утверждение дает мне сообщение об ошибке:

/* 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 байт. Любые указатели будут замечательными.

+2

Что означает «дает мне ошибку»? – Blorgbeard

+0

Приношу свои извинения за то, что в моем вопросе не было ясно. Я получил следующую ошибку: «error:« EVP_CTRL_GCM_SET_IVLEN »не был объявлен в этой области» –

ответ

0

Я разрешил ошибку. На самом деле, в коде примера, порядок для инициализации операции шифрования и установки длины внутривенное выглядит следующим образом:

* 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(); 

я имел обратный порядок для этих утверждений т.е. установка длины внутривенно, а затем инициализации операции шифрования. Я думал, что это независимые шаги, и порядок не имеет значения. Но, возможно, интерфейс должен знать, какой механизм шифрования он использует, прежде чем устанавливать какие-либо параметры.