Как использовать openssl aes algo для шифрования каждого кадра - PullRequest
0 голосов
/ 22 мая 2018

Как сказано в заголовке, я хочу зашифровать каждый кадр, захваченный OpenCV, используя OpenSSL алгоритм AES.

Теперь у меня есть данные кадра, которые я называю frame_data.И тип frame_data это std::vector<unsigned char>. Очевидно, что его длина или размер не фиксированы.

Я могу зашифровать и расшифровать 16-байтовые данные. Например:

unsigned char key[16] = {'0'};

unsigned char plain_text[16] = {'1'};
std::vector<unsigned char> cipher_vec(16);
std::vector<unsigned char> decrypt_vec(16);

AES_KEY aes_enc_ctx;
AES_set_encrypt_key(key, 128, &aes_enc_ctx);
AES_encrypt(plain_text, cipher_vec.data(), &aes_enc_ctx);

// aes decrypt
AES_KEY aes_dec_ctx;
AES_set_decrypt_key(key, 128, &aes_dec_ctx);
AES_decrypt(cipher_vec.data(), decrypt_vec.data(), &aes_dec_ctx);

Так, как я могу зашифровать frame_dataиспользуя OpenSSL?

1 Ответ

0 голосов
/ 22 мая 2018

Вы используете неправильные функции.Функции AES_ * являются низкоуровневыми криптографическими примитивами и должны использоваться только в том случае, если вы действительно знаете, что делаете.

Предпочтительным подходом для шифрования / дешифрования является использование функций OpenSSL EVP_ *.В частности, EVP_EncryptInit_ex(), EVP_EncryptUpdate() и EVP_EncryptFinal_ex(), а также функции дешифрования с аналогичными именами.Они могут принимать ввод переменного размера.

Справочные страницы для этих функций доступны здесь:

https://www.openssl.org/docs/man1.1.0/crypto/EVP_EncryptInit_ex.html

Здесь есть несколько примеров:

https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption

Вам потребуется выбрать подходящий режим для алгоритма шифрования (например, GCM, CCM, OCB и т. Д.), А затем передать соответствующий шифр в функцию EVP_EncryptInit_ex ().

...