如何使用openssl aes algo加密每一帧

时间:2018-05-22 09:45:20

标签: encryption openssl aes

正如标题所说,我想使用OpenCV AES算法加密OpenSSL捕获的每一帧。

现在我有帧数据,我称之为frame_dataframe_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 :(得分:2)

您使用的功能错误。 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()函数。