好的,我正在做一个视频处理项目,这包括加密每一帧,并将其写入文件(outputenc.avi)。我使用key.jpg通过异或运算对每个文件进行加密,它运行良好,但问题是在解密过程中,我得到了一个嘈杂的原始图像,正在处理的密钥和帧都是尺寸为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);发布于 2013-03-22 18:41:07
你的代码还有更多的问题:
首先,将帧转换为灰度:
cv::cvtColor(matOriginal,matProcessed,CV_BGR2GRAY);然后将其发送到您的文件中。从这一点上说,没有办法让你的彩色图像回来。
然后,您将使用(很可能是有损的)编解码器保存图像。有损编解码器在此过程中会丢失一些信息。而且它只保证压缩后的图像看起来与原始图像相似。不能保证它将是相同的。因为“加密”的图像是噪声,所以结果将是噪声。但可能是完全不同的噪音。
然后,这一行试图就地执行一个不能就地工作的算法。但更重要的是,您在文件中编写了一个灰度图像,然后尝试将其转换为灰度图像,就好像它是彩色图像一样。完全是胡说八道。
cvtColor(temp,temp,CV_BGR2GRAY);然后,在不是“加密”图像的图像上尝试“描述算法”。
抱歉,代码中的每一行都是胡说八道。
因此,我的建议是从低层开始:了解编解码器,了解加密和安全性,阅读其他人在此主题上所做的工作,然后开始。
顺便说一句,创建自己的加密算法不是最好的想法(至少当你不是密码学专家的时候):https://security.stackexchange.com/questions/25585/is-my-developers-home-brew-password-security-right-or-wrong-and-why
https://stackoverflow.com/questions/15561668
复制相似问题