混沌密码与数字图像加密应用

  • 格式:doc
  • 大小:14.36 MB
  • 文档页数:25

.

资料 实验项目与实验报告( 1 )

学科:信息与网络安全 学号: :羊波 时间:11月3 日

实验项目: 混沌密码与数字图像加密应用、信息隐藏

实验目的:利用Matlab软件基于Logistic映射的加密算法对图像进行加密和解密,以及利用DEV C++软件、Excel表格绘制图像基于Logistic映射的算法产生的混沌现象。理解Logistic加密算法,掌握加密过程。

一、实验步骤:

1. 完成实验教程1-3

2. 登录网络平台修改作业发布密码,上传实验报告一

3. 注册百度知道号,并加入知行网络团队。

一、实验原理

1.混沌的定义

混沌(Chaos)是非线性确定性系统中具有的在随机现象,具有运动轨迹的不可预测性、对系统初值和控制参数的敏感性以及运动轨迹的遍历特性等。

第一种定义是基于混沌的“蝴蝶效应”,即倘若一个非线性系统的行为对初始条件的微小变化具有高度敏感的依赖性,则称混沌运动。这就是说,一个系统的混沌行为对初始条件的变化具有高度敏感性,表现出极端的不稳定性。这种高度不稳定性,是指在相空间初始极其邻近的两条轨道,随着时间的推进,两条轨道的距离彼此以指数形式迅速分离而永不相遇,它们的行为具有局部不稳定性。

第二种混沌定义是基于Li-Yorke定理,从数学上严格定义。Li-Yorke定理为:设f(x)是[a,b]上的连续自映射,若f(x)有3个周期点,则对任何正整数n,f(x)有n周期点。混沌定义如下:闭区间I上的连续自映射f(x),倘若满足条件,则一定出现混沌现象:

(1)f周期点的周期无上界;

(2)闭区间I上存在不可数子集S。

2. Logisitc 混沌模型

由于混沌系统具有伪随机性、不确定性和对初始条件与系统参数的极为敏感性,其自身的动力学特性使混沌现象天生具备了应用于安全的条件,在图像加密领域表现出良好的应用前景。Logistic混沌系统有一个自变量,是一维混沌系统。含有两个自变量的混沌系统是二维的,含有三维系统及多于三维的混沌系统是高位混沌系统。Logistic混沌系统由下式给出:

1(1) [0,1]nnnnxxxx,n=1,2,…… (1)

研究表明,式(1)这个看似极为简单的方程当参数λ变化时有极复杂的动态行为。当03.57时,系统处于混沌状态。

二、实验步骤

下面以一副256×256的图像test.gif 为例,利用MATLAB软件进行图像加密,加密程序如下:

.

资料 %混沌加密Logisitc加密算法,图片像素为256*256,可直接放在work子文件夹中

clc;

clear all;

global M;

global N;

global Ximage;

global Yimage;

global sy;

Ximage=double(imread('test.gif'));

key1=0.1;

key=4;

[M,N]=size(Ximage);

figure(1)

imshow(Ximage,[]);

Ximage=double(Ximage);

for(i=1:M)

for(j=1:N)

key1=key*key1*(1-key1);

a(i,j)=key1;

end

end

key2=0.2;

for(i=1:M)

for(j=1:N)

key2=key*key2*(1-key2);

b(i,j)=key2;

end

end

x=0.4*a+0.6*b;

e=round(x*256);

tt=0.01;

Yimage=tt*Ximage+(1-tt)*e;

figure(2)

imshow(Yimage,[]);

figure(3)

imhist(uint8(Ximage));

title('原图像的直方图');

figure(4)

imhist(uint8(Yimage));

title('加密之后的直方图');

%%置乱度分析

Yimage=double(Yimage);

sx=sum(sum((Ximage-256*rand(M,N)).^2));

.

资料 DD=sy/sx %置乱度

global M;

global N;

global Ximage;

global Yimage;

key1=input('请输入密钥key1:');

key=4;

for(i=1:M)

for(j=1:N)

key1=key*key1*(1-key1);

a(i,j)=key1;

end

end

key2=input('请输入密钥key2:');

for(i=1:M)

for(j=1:N)

key2=key*key2*(1-key2);

b(i,j)=key2;

end

end

x=0.4*a+0.6*b;

e=round(x*256);

tt=0.01;

Zimage=(Yimage-(1-tt)*e)/tt;

figure(5)

imshow(Zimage,[]);

加密过程:

① 首先将要加密的图片test.gif保存在d盘中,如下图1所示:

图1存在d盘中的test图片

.

资料 ② 打开Matlab软件并把上面的加密程序输入软件环境窗口,如下图2所示:

图2在Matlab中输入的编程

③ 程序输入完成后,按回车键,程序会运行得出5图片,分别为加密前的原图和加密后的图片、加密前的直方图和加密后的直方图。如下图3、图4、图5、图6所示:

.

资料

图3加密前的原图

.

资料 图4加密后的图片

图5加密前的直方图

.

资料

图6加密后的直方图

说明:加密后的灰度直方图分析可以用来衡量加密算法的扰乱性。上图3、图4、图5、图6是加密前后的图像以及它们的直方图的对比。可见,加密后的直方图呈均匀分布,未保留任何明文信息。图6加密后的直方图的图像越均匀说明混沌效应越好,上图6总体上来说是均匀的,只是在编程的时候考虑的只是黑白色的点,所以直方图看起来全部的点不是绝对的均匀。

解密过程:

⑦如果想得到原图(解密),必须在MATLAB界面窗口输入两个密钥, “请输入密匙key1:0.1 请输入密匙key2:0.2”; 如下图7所示:

.

资料

图7解密之后得到的原图

从上图可以看出,加密后的图像没有留下原图的痕迹,而解密后的图像看不出差别,此方法加密效果良好。

换一副带有彩色256×256的图像111.gif 为例,利用MATLAB软件进行图像加密,加密程序跟上面的差不多,只是把图片名称改了,步骤以上的也一样如下所示:

① 把修改图片名称后的程序输入Matlab软件中,如下图8所示:

.

资料

图8修改图片的名称

② 运行之后得出来的结果如下图9、图10、图11、图12所示:

图9加密的原图

.

资料

图10加密后的图

.

资料

图11 加密前的图像直方图

.

资料

图12加密后的图像直方图

.

资料

图13解密后的到的图像

说明:由上图9、图10、图11、图12、图13可知,彩色图片加密后的图片跟原先用的黑白图片加密的图像一样都是由黑白的点组成的。而且彩色图片加密后的图像直方图总体上来说也是符合混沌效应现象的。

C语言代码实现混沌效应,加密程序如下:

//简单模拟LOGISTIC模型C++源程序

#include

#include

#define N 300

using namespace std;

void fun(float x0,float u,int k,float result[])

{ int i=0;

float temp_1,temp_2,temp_3;

temp_1=x0;

while(k)

.

资料 {

result[i++]=temp_1;

temp_2=1-temp_1;

temp_3=u*temp_1;

temp_1=temp_2*temp_3;

k--;

}

}

int main()

{

int i,k;

float x0,u,*result,*ratio,sum=0.0,ave,s=0.0,st;

cout<<"How many logistic sequence do you wanna output?"<

cin>>k;

while(k<1||k>N)

{

cout<<"Input a positive integer from 1 to "<

cin>>k;

}

result=new float[k];

ratio=new float[k-1];

cout<<"Input a float value between 0 and 4 :"<

cin>>u;

cout<<"Input a float value between 0 and 1 :"<

cin>>x0;

fun(x0,u,k,result);

for(i=0;i

{

cout<

}

}

① 据老师提供的C语言代码,为了方便后续的数据统计工作,进一步更改代码的输出格式,然后把修改后的代码输入DEV C++软件环境窗口中。如下图1中绿色圈圈所示: