“AES_ctr128_encrypt”未在此范围内声明
‘AES_ctr128_encrypt’ was not declared in this scope
我正在测试 this OpenSSL AES-128 CTR 模式加密。
#include <openssl/aes.h>
#include <openssl/rand.h>
#include <stdio.h>
#include <string.h>
- 日食
- OpenSSL 1.1.1c(包括在 Eclipse C/C++ 构建设置中添加的文件路径)
我遇到了这个错误(在 C++ 中构建):
../src/AES_OpenSSL_CTR.cpp:128:3: error: ‘AES_ctr128_encrypt’ was not declared in this scope.
我已经包含了 openssl/aes.h。 AES_ctr128_encrypt 已从 OpenSSL 1.1 中删除。1.c?为什么还没有申报?
../src/AES_OpenSSL_CTR.cpp:128:3: error: ‘AES_ctr128_encrypt’ was not declared in this scope
OpenSSL 1.1.1 和 1.1.0 仅提供 AES_encrypt
。它是一个纯软件实现。它在完整块上运行。您需要管理计数器,提供增量,加密计数器,并对纯文本进行 XOR。
您应该使用 EVP 接口,而不是使用低级别 AES_encrypt
。 EVP 算法在可用时使用硬件加速,并结合 AES-128/CTR 等密码和模式。您要查找的函数是 EVP_aes_128_ctr()
。另请参阅 OpenSSL wiki 上的 EVP Symmetric Encryption and Decryption。
如果您提供 Minimal, Complete, and Verifiable example,那么我们可以详细说明您可以采取哪些措施来解决该问题。
如果你想使用AES_ctr128_encrypt
,那么你需要退回到OpenSSL 1.0.2。 OpenSSL 1.1.1 和 1.1.0 不再提供它。
$ git checkout OpenSSL_1_0_2-stable
Branch 'OpenSSL_1_0_2-stable' set up to track remote branch 'OpenSSL_1_0_2-stable' from 'origin'.
Switched to a new branch 'OpenSSL_1_0_2-stable'
$ grep -IR AES_ctr128_encrypt
util/libeay.num:AES_ctr128_encrypt 3216 EXIST::FUNCTION:AES
crypto/aes/aes.h:void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
crypto/aes/aes_ctr.c:void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
如果您回到 OpenSSL 1.0.2,请参阅 AES CTR 256 Encryption Mode of operation on OpenSSL。
由于您有 C++ 程序,您可能会对 OpenSSL wiki 上的 EVP Encryption ... | C++ Programs 感兴趣。它使用 std::unique_ptr
和 secure_string
来管理 OpenSSL 资源。 secure_string
是一个带有安全分配器的 std::basic_string
typedef。它很好地清理了 OpenSSL C 代码。
I am testing this OpenSSL AES-128 CTR mode encryption...
是的,这就是博客的问题(更不用说 2012 年的博客了)。最好按照项目所说的进行操作。 OpenSSL 项目说要使用 EVP 接口。
我正在测试 this OpenSSL AES-128 CTR 模式加密。
#include <openssl/aes.h>
#include <openssl/rand.h>
#include <stdio.h>
#include <string.h>
- 日食
- OpenSSL 1.1.1c(包括在 Eclipse C/C++ 构建设置中添加的文件路径)
我遇到了这个错误(在 C++ 中构建):
../src/AES_OpenSSL_CTR.cpp:128:3: error: ‘AES_ctr128_encrypt’ was not declared in this scope.
我已经包含了 openssl/aes.h。 AES_ctr128_encrypt 已从 OpenSSL 1.1 中删除。1.c?为什么还没有申报?
../src/AES_OpenSSL_CTR.cpp:128:3: error: ‘AES_ctr128_encrypt’ was not declared in this scope
OpenSSL 1.1.1 和 1.1.0 仅提供 AES_encrypt
。它是一个纯软件实现。它在完整块上运行。您需要管理计数器,提供增量,加密计数器,并对纯文本进行 XOR。
您应该使用 EVP 接口,而不是使用低级别 AES_encrypt
。 EVP 算法在可用时使用硬件加速,并结合 AES-128/CTR 等密码和模式。您要查找的函数是 EVP_aes_128_ctr()
。另请参阅 OpenSSL wiki 上的 EVP Symmetric Encryption and Decryption。
如果您提供 Minimal, Complete, and Verifiable example,那么我们可以详细说明您可以采取哪些措施来解决该问题。
如果你想使用AES_ctr128_encrypt
,那么你需要退回到OpenSSL 1.0.2。 OpenSSL 1.1.1 和 1.1.0 不再提供它。
$ git checkout OpenSSL_1_0_2-stable
Branch 'OpenSSL_1_0_2-stable' set up to track remote branch 'OpenSSL_1_0_2-stable' from 'origin'.
Switched to a new branch 'OpenSSL_1_0_2-stable'
$ grep -IR AES_ctr128_encrypt
util/libeay.num:AES_ctr128_encrypt 3216 EXIST::FUNCTION:AES
crypto/aes/aes.h:void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
crypto/aes/aes_ctr.c:void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
如果您回到 OpenSSL 1.0.2,请参阅 AES CTR 256 Encryption Mode of operation on OpenSSL。
由于您有 C++ 程序,您可能会对 OpenSSL wiki 上的 EVP Encryption ... | C++ Programs 感兴趣。它使用 std::unique_ptr
和 secure_string
来管理 OpenSSL 资源。 secure_string
是一个带有安全分配器的 std::basic_string
typedef。它很好地清理了 OpenSSL C 代码。
I am testing this OpenSSL AES-128 CTR mode encryption...
是的,这就是博客的问题(更不用说 2012 年的博客了)。最好按照项目所说的进行操作。 OpenSSL 项目说要使用 EVP 接口。