正如标题所说,我想使用OpenCV
AES算法加密OpenSSL
捕获的每一帧。
现在我有帧数据,我称之为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
?
答案 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()函数。