0

好的,我正在处理一个视频处理项目,这包括对每一帧进行加密并将其写入文件(outputenc.avi)。我使用 key.jpg 使用 XOR 操作加密每个文件,并且进展顺利,但问题是在解密过程中我得到一个嘈杂的原始图像,密钥和正在处理的帧是尺寸为 384 * 288 的灰度图像。

加密

capWebcam.read(matOriginal);
if(matOriginal.empty()==true)
    return;
cv::Mat temp;
cv::resize(matOriginal,matOriginal,dsize,0,0,cv::INTER_CUBIC);
cv::cvtColor(matOriginal,matProcessed,CV_BGR2GRAY);

cv::bitwise_xor(matProcessed,key,temp);
output_enc_cap.write(temp);

解密

capfile.read(temp);
if(temp.empty()==true)
      return;

cvtColor(temp,temp,CV_BGR2GRAY);
cv::bitwise_xor(temp,key,temp);
4

1 回答 1

1

您的代码还有更多问题:

首先,将帧转换为灰度:

cv::cvtColor(matOriginal,matProcessed,CV_BGR2GRAY);

然后将其发送到您的文件。从这一点开始,没有办法恢复您的彩色图像。

然后,您将使用(很可能有损)编解码器保存图像。有损编解码器会在此过程中丢失一些信息。它只保证压缩图像看起来与原始图像相似。不保证它会是相同的。并且因为“加密”的图像是噪声,结果也会是噪声。但可能是完全不同的噪音。

然后,这条线尝试就地执行无法就地工作的算法。但更重要的是,您在文件中写入了灰度图像,然后您尝试将其转换为灰度图像,就好像它是彩色一样。完全废话。

cvtColor(temp,temp,CV_BGR2GRAY);

然后,您在一张不是“加密”图像的图像上尝试“解密算法”。

抱歉,您的代码中的每一行都是胡说八道。

所以,我的建议是从低处开始:了解编解码器,了解加密和安全,阅读其他人在这个主题上所做的事情,然后开始。

顺便说一句,创建自己的加密算法并不是最好的主意(至少当您不是密码学专家时): https ://security.stackexchange.com/questions/25585/is-my-developers-home-brew-password -安全正确或错误以及为什么

于 2013-03-22T10:41:06.823 回答