基于MATLAB的混沌密码与数字图像加密应用、信息隐藏
基于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,[]);
加密過程:
圖1存在d盤中的test圖片
圖2在Matlab中輸入的編程
圖3加密前的原圖
圖4加密后的圖片
圖5加密前的直方圖
圖6加密后的直方圖
說明:加密后的灰度直方圖分析可以用來衡量加密算法的擾亂性。上圖3、圖4、圖5、圖6是加密前后的圖像以及它們的直方圖的對比。可見,加密后的直方圖呈均勻分布,未保留任何明文信息。圖6加密后的直方圖的圖像越均勻說明混沌效應越好,上圖6總體上來說是均勻的,只是在編程的時候考慮的只是黑白色的點,所以直方圖看起來全部的點不是絕對的均勻。
解密過程:
⑦如果想得到原圖(解密),必須在MATLAB界面窗口輸入兩個密鑰, “請輸入密匙key1:0.1 請輸入密匙key2:0.2”; 如下圖7所示:
圖7解密之后得到的原圖
從上圖可以看出,加密后的圖像沒有留下原圖的痕跡,而解密后的圖像看不出差別,此方法加密效果良好。
換一副帶有彩色256×256的圖像111.gif 為例,利用MATLAB軟件進行圖像加密,加密程序跟上面的差不多,只是把圖片名稱改了,步驟以上的也一樣如下所示:
圖8修改圖片的名稱
圖9加密的原圖
圖10加密后的圖
圖11 加密前的圖像直方圖
圖12加密后的圖像直方圖
圖13解密后的到的圖像
說明:由上圖9、圖10、圖11、圖12、圖13可知,彩色圖片加密后的圖片跟原先用的黑白圖片加密的圖像一樣都是由黑白的點組成的。而且彩色圖片加密后的圖像直方圖總體上來說也是符合混沌效應現象的。
C語言代碼實現混沌效應,加密程序如下:
//簡單模擬LOGISTIC模型C++源程序
#include<iostream>
#include<math.h>
#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?"<<endl;
cin>>k;
while(k<1||k>N)
{
cout<<"Input a positive integer from 1 to "<<N<<":"<<endl;
cin>>k;
}
result=new float[k];
ratio=new float[k-1];
cout<<"Input a float value between 0 and 4 :"<<endl;
cin>>u;
cout<<"Input a float value between 0 and 1 :"<<endl;
cin>>x0;
fun(x0,u,k,result);
for(i=0;i<k;i++)
{
cout<<result[i]<<endl;
}
}
圖1修改輸出語句后的代碼
圖2運行得出的數據
圖3通過拷貝在Word中的數據
圖4Excel中的數據與繪制的折線圖
說明:從圖4折線圖中可以看出圖像中點的分布總體上是滿足混沌現象的。
二、實驗原理(信息隱藏)
1.數字信息隱藏技術已成為信息科學領域研究的一個熱點。被隱藏的秘密信息可以是文字、密碼、圖像、圖形或聲音,而作為宿主的公開信息可以是一般的文本文件、數字圖像、數字視頻和數字音頻等。
2.信息隱藏系統的模型可以用下圖1-1來表示。我們把待隱藏的信息稱為秘密信息,它可以是版權信息或秘密數據,也可以是一個序列號;而公開的信息則稱為宿主信息,如視頻、音頻片段等。這種信息隱藏過程一般由密鑰來控制,通過嵌入算法將秘密信息隱藏于公開信息中,而隱蔽宿主則通過通信信道傳遞,然后對方的檢測器利用密鑰從隱蔽宿主中恢復/檢測出秘密信息。
密鑰
密鑰
秘密信息
隱蔽宿主
秘密信息
宿主信息
檢測器
宿主信息
編碼器
圖1-1 信息隱藏系統模型
由此也可以看出,信息隱藏技術主要有下述兩部分組成:
實驗步驟如下:
圖1對文件加密成功
圖2解密成功
圖3加密成功
圖6解密過程
圖7自解密完成
圖8得到原來的文件類型
說明:根據多次實驗得出對EXE文件加密保護以及去除EXE文件密碼保護或自解密殼操作步驟其實是差不多的。
圖1嵌入之前的原圖
圖2信息隱藏成功
總結
以上是生活随笔為你收集整理的基于MATLAB的混沌密码与数字图像加密应用、信息隐藏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 守护白起
- 下一篇: Qt实现QQ截图中的马赛克效果