密码学实验报告二

  • 格式: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变换来实现