基于MATLAB的混沌密码与数字图像加密应用、信息隐藏
实验目的:利用Matlab软件基于Logistic映射的加密算法对图像进行加密和解密,以及利用DEV C++软件、Excel表格绘制图像基于Logistic映射的算法产生的混沌现象。理解Logistic加密算法,掌握加密过程。
一、实验原理
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混沌系统由下式给出:
,n=1,2,…… (1)
研究表明,式(1)这个看似极为简单的方程当参数λ变化时有极复杂的动态行为。当0<λ≤3时,该模型性态简单;当3<λ≤3.75时,系统处于倍周期状态;当λ>3.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,[]);