Я тестирую Это Openssl AES-128 CTR 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? Почему еще не объявлено?

3
TJCLARK 27 Сен 2019 в 07:41

1 ответ

Лучший ответ

../src/aes_openssl_ctr.cpp:128:3: Ошибка: 'aes_ctr128_encrypt' не объявлен в этой области

OpenSSL 1.1.1 и 1.1.0 обеспечивают только AES_encrypt. Это только реализация программного обеспечения. Он работает на полных блоках. Вам нужно управлять счетчиком, предоставить приращения, шифровать счетчик и XOR простой текст.

Вместо использования низкого уровня AES_encrypt, вы должны использовать интерфейсы EVP. Алгоритмы EVP используют аппаратное ускорение, когда доступны, и объединяют шифры и режимы, такие как AES-128 / CTR. Функция, которую вы ищете, это EVP_aes_128_ctr(). Также см. EVP Симметричное шифрование и дешифрование на Wiki.

Если вы предоставляете Минимальный, полный и проверяемый пример, тогда мы можем сказать больше о том, что вы можете сделать, чтобы исправить проблему.


Если вы хотите использовать 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 Способ эксплуатации в OpenSSL .


Поскольку у вас есть программа C ++, вы можете быть заинтересованы в EVP шифрование. . |. C ++ программы на Wiki OpenSSL. Он использует std::unique_ptr и secure_string для управления ресурсами OpenSSL. secure_string a std::basic_string typecef с безопасным распределением. Он хорошо очищает код COPENSSL CODE.


Я проверяю этот режим режима OpenSSL AES-128 CTR ...

Да, так что это проблема со своими блогами (не говоря уже о одной из 2012 года). Вероятно, лучше следовать тому, что говорит проект. Проект OpenSSL говорит использовать интерфейсы EVP.

4
jww 27 Сен 2019 в 05:12