Image 使用XOR的图像加密

Image 使用XOR的图像加密,image,opencv,encryption,Image,Opencv,Encryption,好的,我正在做一个视频处理项目,其中包括对每个帧进行加密并将其写入一个文件(outpuntec.avi)。我使用key.jpg使用XOR操作对每个文件进行加密,但问题是在解密过程中,我得到了一个有噪声的原始图像。密钥和正在处理的帧是尺寸为384*288的灰度图像 百科全书 capWebcam.read(matOriginal); if(matOriginal.empty()==true) return; cv::Mat temp; cv::resize(matOriginal,matOr

好的,我正在做一个视频处理项目,其中包括对每个帧进行加密并将其写入一个文件(outpuntec.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);

您的代码存在更多问题:

首先,将帧转换为灰度:

cv::cvtColor(matOriginal,matProcessed,CV_BGR2GRAY);
然后将其发送到您的文件中。从这一点上,没有办法得到你的彩色图像回来

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

然后,这一行尝试在适当的位置执行一个无法正常工作的算法。但更重要的是,您在文件中写入了灰度图像,然后尝试将其转换为灰度,就好像它是彩色的一样。完全是胡说八道

cvtColor(temp,temp,CV_BGR2GRAY);
然后,在一个不是“加密”的图像上尝试“描述算法”

对不起,代码中的每一行都是废话

cvtColor(temp,temp,CV_BGR2GRAY);
所以,我的建议是从低一点开始:了解编解码器,了解加密和安全性,阅读其他人对此主题所做的工作,然后开始

顺便说一句,创建自己的加密算法并不是最好的主意(至少当您不是一名脚本编程专家时):

我的感觉是,您不满意的问题可能是由于处理链中的某个地方存在有损压缩。JPG是有损的。我不知道阿维的事。然而,一个更大的问题是(假设我对你的理解是正确的),你认为用相同的密钥对每个帧进行XORing是很好的加密。这和维格纳密码差不多,维格纳密码在100多年前就被破解了。研究AES的良好实现(libgcrypt很好),而不是尝试自己进行加密。先生,我只需要一个低调的加密。先生,我只需要存储视频的灰度版本。我对图像处理非常陌生,如果我在那里做了一些无意义的代码,请原谅。。。。