密码学实验报告二
- 格式:doc
- 大小:123.00 KB
- 文档页数:5
报告创建时间: 《现代密码学》实验报告
年级、专业、班级 计算机科学与技术1班 姓名 陈康裕
实验题目 Arnold变换
实验时间 2014、11、6 实验地点 主教0410
实验成绩 实验性质 □验证性 ■设计性 □综合性
教师评价:
□算法/实验过程正确; □源程序/实验内容提交 □程序结构/实验步骤合理;
□实验结果正确; □语法、语义正确; □报告规范;
其他:
评价教师签名:
一、实验目的
通过编程实现Arnold变换,加深对图像置乱的基本方法,并了解Arnold变换的周期性。
二、实验项目原理和内容
1、Arnold变换
Arnold变换是由Arnold提出的一种变换,也称猫变换、猫映射。目前Arn变换主要用于图像置乱。对于规模为NXN的正方形数字图像来说,我们将图像的所有像素集合看作一个NXN的矩阵。在Arnold变换中,设该矩阵中的任意像素位置为(x,y),将像素点(x,y)按照某种映射变换到另一点(x’,y’):
''11mod12xxNyy
对于数字图像而言,我们仅仅是对图像中像素的位置进行了改变而没有改变其值,如果我们对数字图像迭代地使用Arnold变换,即,将输出'',Txy作为下一次猫映射的输入,那么迭代一定轮数,图像就会出现置乱的效果。
2、Arnold变换具有周期性
Arnold变换具有周期性,将迭代到一定次数T时,原本已被置乱的图像将会回复到原始图像。Arnold变换的周期与图像规模N有关,表一给出了不同图像规模下,Arnold变换的周期数。
N 4 6 8 10 12 14 16 18
周期T 3 12 6 30 12 24 12 12
N 20 60 100 128 200 256 512 1024
周期T 30 60 150 96 150 192 384 768
表一 不同规模N下Arnold变换的周期表
自己创建明文信息(需正方形矩阵形式),并选择一个密钥,即迭代次数,编写Arnold变换实现程序,实现置乱和回复的操作
三、实验过程或算法(源程序)
实验源代码:
function Arnoldtest1(Image,Frequency,crypt)
%将Q赋值给M,计算Q的大小
Q=imread(Image);
M = Q ;
figure(1)
imshow(M);
title('原图像')
Size_Q = size(Q);
n = 0;
K = Size_Q(1);
M1_t = Q;
M2_t = Q;
for count=0:1:2
for s = 1:Frequency
n = n + 1;
if mod(n,2) == 0
for i = 1:K for j = 1:K
c = M2_t(i,j);
M1_t(mod(i+j-2,K)+1,mod(i+2*j-3,K)+1) = c;
end
end
else
for i = 1:K
for j = 1:K
c = M1_t(i,j);
M2_t(mod(i+j-2,K)+1,mod(i+2*j-3,K)+1) = c;
end
end
end
end
if mod(Frequency,2) == 0
M = M1_t;
else
M = M2_t;
end
imwrite( double(M)/255,'cxujun.bmp' );
figure(count+2)
if count==0
imshow(M);
title('置乱图像')
elseif count==1
imshow(M);
title('恢复图像')
end
Frequency=ArnoldPeriod(N)-Frequency;
end
四、实验结果及分析和(或)源程序调试过程
1、加密前的图像:
2、加密的图像:
3、解密图像:
实验分析:在这次Arnold变换实验中,我采用的是MATLAB软件编程实现的,这次实验难度不是很大,只要我们明白实验原理,就可以做了。但是这次实验的重点是为什么Arnold变换会出现周期性,这才是我们需要思考的?在验证个实验时,我采用的是判断变换之后每一个点和原来的点是否是在同一点上,这样来确定他们是否是相等的,来达到其是否复原。这样做有两个问题,其一是我采用的图片是200*200的,要判断的点太多,其二是我们的实验要事先确定图片的大小。针对这个问题,我查资料得到,其实我可以不用判断这么多的点,而且,我也可以求出周期的整数倍,这样就可以达到我们的目的。
实验总结:在这次实验中,我的收获很大,我知道了我们的图片可以加密传输,可以通过Arnold变换来实现