可视加密创新实验报告
组号:
创新性实验报告
题目:________可视加密
学院:________电子通信与物理_____________ 专业班级:_________通信工程12-2______________ 学号:_________201201101303______________ 学生姓名:____________邓海斌_________________ 指导教师:_____________颜斌__________________ 完成日期:___________________________________
1.摘要
可视密码术始自1994 年。它涉及的问题是:有无可能将一个秘密图片分发给两个人,每个
人都无法从其获得的加密图片获得原始图片信息,但是将图片合在一起就可以获得原始的图
片的信息。本项实验是用可视密码术的提出者设计的一套算法实现简单的可视密码方案。
可视密码方案提供了一种将一个秘密的黑白图像分割成多个子秘密的方案,不需要任何密码学的计算就可以通过这些子秘密获得原来的秘密图像。
关键词:
可视加密, matlab, 噪声.
2.设计的目的
1.理解可视图像加密术的基本思想和方法。
2.进一步熟悉 matlab 软件的使用。
3.使用 matlab 编程加密二值图像并重建。
4.提高分析问题、发现问题和解决问题的能力。
3.设计的原理
可视密码的解密原理是通过投影片的叠加,以视觉辨别出秘密图像,在人类视觉系统分辨色彩时,会依据色块与周围环境之间所产生的色彩对比来进行辨识。例如同一个灰点在黑纸与白纸上,人类视觉系统会认为在黑纸的灰点会比在白纸上的灰点看起来亮,这就是视觉系统在辨别灰度差异的识别能力,可视密码就是由此概念来建构的。表.1是一个(2,2)可视密码的编码模型,表中的每一个黑色或白色代表一个像素的颜色,当从秘密图像中拿到一个像素,若此像素为白色,就随机选择表格中的第一行或第二行的像素组合配置在分存图像的对应位置上;若此图像像素为黑色,则随机选择第三行或第四行的像素组合配置在分存图像的对应位置上。表格最后一列则是分存图像1与分存图像2叠加时的结果。从此表中可以发现,当只有一张分存图像时,是无法辨识出原秘密图像的像素点的,一旦两张分存图像叠加,对应在原图像的黑点会产生全黑的两个像素点组合,而对应在原秘密图像的白点会产生一黑一白的两个像素点组合,利用视觉系统即可分辨黑点与白点的差异。根据表1编码模型,可将此概念延伸到(k,n)可视密码,即将图像加密为n张分存图像,当取k张(或k张以上)分存图像同时叠加即可辨识出秘密图像,但取k-1张(或以下)分存图像同时叠加则无法辨识出秘密图像。
Naor 方案用于处理二值图像。该方案将原图像的一个像素分解为两个像素,如下图所示:
如果当前像素是0,则以概率0.5 分别取第一二行,如果当前像素是1,则以概率0.5 分别取第三四行。最后一列给出了将两部分合成到一起的效果。原来的黑像素还是黑的,但是原来
的白像素变成了一边黑一边白。
4.设计的过程
1.程序流图如图1所示
2.读入文件并扩展像素。我们将每个像素扩展为两个像素,这样才能实现替换。使用如下程序实现。
Img_in = imread('lena.tiff');
[Nr, Nc] = size(Img_in);
Img_scaled = zeros(Nr, 2*Nc);
Img_scaled((1:Nr), 2*(1:Nc))=Img_in;
Img_scaled((1:Nr), 2*(1:Nc)-1)=Img_in;
3.根据像素值替换原始像素
Share1 = zeros(Nr,2*Nc);
Share2 = zeros(Nr,2*Nc);
for i=1:Nr
for j=1:2:2*Nc
if Img_scaled(i,j) == 0 % white pixel
randomflip = normrnd(0,1,1,1)>0;
if randomflip
Share1(i,j)=0;
Share1(i,j+1)=1;
Share2(i,j)=0;
Share2(i,j+1)=1;
else
Share1(i,j)=1; Share1(i,j+1)=0;
Share2(i,j)=1; Share2(i,j+1)=0;
end
else
randomflip = normrnd(0,1,1,1)>0;
if randomflip
Share1(i,j+1)=1; Share1(i,j)=0;
Share2(i,j)=1; Share2(i,j+1)=0;
else
Share1(i,j)=1; Share1(i,j+1)=0;
Share2(i,j+1)=1;Share2(i,j)=0;
end
end% end of if
end
end
figure(1);
subplot(4,1,1); imshow(Img_scaled,[]);
subplot(4,1,2); imshow(Share1,[]);
subplot(4,1,3); imshow(Share2,[]);
subplot(4,1,4); imshow(Share1+Share2>1,[]);
A=50; % 噪声系数A
noise=A*randn(size(Img_scaled));
Share1=Share1+noise; % 叠加噪声
Share2=Share2+noise; % 叠加噪声
figure(2)
subplot(1,3,1); imshow(Share1,[]);
subplot(1,3,2); imshow(Share2,[]);
subplot(1,3,3); imshow(Share1+Share2>1,[])
5.实验测试条件、配置和结果
在matlab环境下运行程序,得到的结果如下:
图2,不加噪声的情况下,原图, Share1 和Share2,和解密后的图
图3.分别为加噪声后的Share1 和Share2,和解密后的图
6.结论
可视加密技术可以很好的保密传输并且能较好的还原出原图,是一种有效的加密方式,然而从实验中得知,噪声对可是加密还原出原图的影响比较大,在本实验中自己有很多不知道的地方,很感谢给与我帮助的同学。
7.参考文献
附录程序:
function visualcryptography()
clear all; close all;
Img_in = imread('lena.tiff');
[Nr, Nc] = size(Img_in);
Img_scaled = zeros(Nr, 2*Nc);
Img_scaled((1:Nr), 2*(1:Nc))=Img_in;
Img_scaled((1:Nr), 2*(1:Nc)-1)=Img_in;
for i=1:Nr
for j=1:1:2*Nc
if Img_scaled(i,j) > 128
Img_scaled(i,j)=1;
else
Img_scaled(i,j)=0;
end
end
end
Share1 = zeros(Nr,2*Nc);
Share2 = zeros(Nr,2*Nc);
for i=1:Nr
for j=1:2:2*Nc
if Img_scaled(i,j) == 0 % white pixel randomflip = normrnd(0,1,1,1)>0; %
if randomflip
Share1(i,j)=0; Share1(i,j+1)=1;
Share2(i,j)=0; Share2(i,j+1)=1;
else
Share1(i,j)=1; Share1(i,j+1)=0;
Share2(i,j)=1; Share2(i,j+1)=0;
end
else
randomflip = normrnd(0,1,1,1)>0;
if randomflip
Share1(i,j)=0; Share1(i,j+1)=1;
Share2(i,j)=1; Share2(i,j+1)=0;
else
Share1(i,j)=1; Share1(i,j+1)=0;
Share2(i,j)=0; Share2(i,j+1)=1;
end
end% end of if
end
end
figure(1);
subplot(4,1,1); imshow(Img_scaled,[]);
subplot(4,1,2); imshow(Share1,[]);
subplot(4,1,3); imshow(Share2,[]);
subplot(4,1,4); imshow(Share1+Share2>1,[]);
A=50; % 噪声系数
noise=A*randn(size(Img_scaled));
Share1=Share1+noise; % 叠加噪声
Share2=Share2+noise; % 叠加噪声
figure(2)
subplot(3,1,1); imshow(Share1,[]);
subplot(3,1,2); imshow(Share2,[]);
subplot(3,1,3); imshow(Share1+Share2>1,[])