-1

我正在尝试在 C++ 中使用 OpenSSL 提供的 AES GCM 加密机制,并使用此链接上的示例作为参考: 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 字节的默认值。任何指针都会很棒。

4

1 回答 1

1

我解决了错误。实际上,在示例代码中,初始化加密操作和设置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 长度,然后初始化加密操作。我想,这些是独立的步骤,顺序无关紧要。但是,在设置任何参数之前,接口可能需要知道它使用了哪种加密机制。

于 2016-08-23T13:43:45.813 回答