一、DNA混沌系统图像加密简介

基于DNA编码的图像加密,采用将图像分块进行DNA编码,通过CHEN超混沌系统产生密钥,进行特殊的DNA运算后解码得到加密后的图像。
Logistic混沌置乱,先不说有多复杂,其实很简单。
Logistic函数是源于一个人口统计的动力学系统,其系统方程形式如下:
X(k+1) = u * X(k) * [1 - X(k)],(k=0,1,…,n)
先不用管这个方程是怎么得出来的,觉得不舒服的话自己百度去。可以看出这个方程是非线性的,迭代的形式。要使用的话,我们需要知道两个东西:
① 初值:X(0)
② 参数:u

为什么这个方程可以称作混沌呢?它什么时候是一个混沌系统呢?这个也是有条件的:

① 0 < X(0) < 1

② 3.5699456… < u <=4

当满足上述两个条件时,Logistic函数工作于混沌状态。这两个条件是怎么来的请百度,我们这里只说算法和实现。什么是混沌状态:顾名思义就是一种无序的、不可预测的、混乱的、摸不到头、摸不到尾的状态。混沌状态时会出现什么现象,我们以下面的参数为例:

① X(0) = 0.1

② u = 4

当迭代n次后,我们就得到了X(1)、X(2)、…,X(n)这么n个值。那么这就是一个混沌序列,是一维的暂且称作序列A,也就是我们想要得到的序列,在MATLAB中,可以看出X(i)(i=1,2,…,n)的取值是在(0,1)之间的——这是一个很好地特性,就像图像灰度值是在(0,255)之间一样。那么我们把这个一维序列归一化到(0,255)之间得到序列B。
再来看加密过程。对于一幅MN大小的图像(暂且称为Picture),我们需要产生一个同样大小的矩阵来对其进行加密。如此说来,只需要迭代MN次得到序列A,再转成序列B,此时序列B是一维的,将其转化成M*N的二维矩阵(暂且称为Fuck)。因此,用Fuck与Picutre进行异或,便可得到一幅新的图像,称作Rod,如此便完成了一次图像加密,加密后的图像为Rod。

Rod=Picture⊕Fuck(⊕表示异或)

这样我们手中的秘钥是:u,X(0)

此种加密方式称作序列加密,可以看出这种加密方式改变了下像素的灰度(直方图变了),没有改变位置。解密同样道理:Picture = Rod⊕Fuck。

二、部分源代码

clear;clc;
I=imread('lena.bmp','bmp');         %读取图像信息
figure;imshow(I);title('原始图片');
figure;imhist(I);title('原始图片直方图');
axis([0 255 0 4000]);
[M,N]=size(I);                      %将图像的行列赋值给M,N
t=4;    %分块大小%% 原始图片信息熵
T1=imhist(I);   %统计图像灰度值从0~255的分布情况,存至T1
S1=sum(T1);     %计算整幅图像的灰度值
xxs1=0;
for i=1:256pp1=T1(i)/S1;   %每个灰度值占比,即每个灰度值的概率if pp1~=0xxs1=xxs1-pp1*log2(pp1);end
end%% 原始图像相邻像素相关性分析
%{先随机在0~M-1行和0~N-1列选中1000个像素点,
计算水平相关性时,选择每个点的相邻的右边的点;
计算垂直相关性时,选择每个点的相邻的下方的点;
计算对角线相关性时,选择每个点的相邻的右下方的点。
%}
NN=1000;    %随机取1000对像素点
x1=ceil(rand(1,NN)*(M-1));      %生成1000个1~M-1的随机整数作为行
y1=ceil(rand(1,NN)*(N-1));      %生成1000个1~N-1的随机整数作为列
EX1=0;EY1_SP=0;DX1=0;DY1_SP=0;COVXY1_SP=0;    %计算水平相关性时需要的变量
EY1_CZ=0;DY1_CZ=0;COVXY1_CZ=0;                %垂直
EY1_DJX=0;DY1_DJX=0;COVXY1_DJX=0;             %对角线
I=double(I);
for i=1:NN%第一个像素点的E,水平、垂直、对角线时计算得出的第一个像素点的E相同,统一用EX1表示EX1=EX1+I(x1(i),y1(i)); %第二个像素点的E,水平、垂直、对角线的E分别对应EY1_SP、EY1_CZ、EY1_DJXEY1_SP=EY1_SP+I(x1(i),y1(i)+1);EY1_CZ=EY1_CZ+I(x1(i)+1,y1(i));EY1_DJX=EY1_DJX+I(x1(i)+1,y1(i)+1);
end
%统一在循环外除以像素点对数1000,可减少运算次数
EX1=EX1/NN;
EY1_SP=EY1_SP/NN;
EY1_CZ=EY1_CZ/NN;
EY1_DJX=EY1_DJX/NN;
for i=1:NN%第一个像素点的D,水平、垂直、对角线时计算得出第一个像素点的D相同,统一用DX表示DX1=DX1+(I(x1(i),y1(i))-EX1)^2;%第二个像素点的D,水平、垂直、对角线的E分别对应DY1_SP、DY1_CZ、DY1_DJXDY1_SP=DY1_SP+(I(x1(i),y1(i)+1)-EY1_SP)^2;DY1_CZ=DY1_CZ+(I(x1(i)+1,y1(i))-EY1_CZ)^2;DY1_DJX=DY1_DJX+(I(x1(i)+1,y1(i)+1)-EY1_DJX)^2;%两个相邻像素点相关函数的计算,水平、垂直、对角线COVXY1_SP=COVXY1_SP+(I(x1(i),y1(i))-EX1)*(I(x1(i),y1(i)+1)-EY1_SP);COVXY1_CZ=COVXY1_CZ+(I(x1(i),y1(i))-EX1)*(I(x1(i)+1,y1(i))-EY1_CZ);COVXY1_DJX=COVXY1_DJX+(I(x1(i),y1(i))-EX1)*(I(x1(i)+1,y1(i)+1)-EY1_DJX);
end
%统一在循环外除以像素点对数1000,可减少运算次数
DX1=DX1/NN;
DY1_SP=DY1_SP/NN;
DY1_CZ=DY1_CZ/NN;
DY1_DJX=DY1_DJX/NN;
COVXY1_SP=COVXY1_SP/NN;
COVXY1_CZ=COVXY1_CZ/NN;
COVXY1_DJX=COVXY1_DJX/NN;
%水平、垂直、对角线的相关性
RXY1_SP=COVXY1_SP/sqrt(DX1*DY1_SP);
RXY1_CZ=COVXY1_CZ/sqrt(DX1*DY1_CZ);
RXY1_DJX=COVXY1_DJX/sqrt(DX1*DY1_DJX);%% 1.补零
%将图像的行列数都补成可以被t整除的数,t为分块的大小。
M1=mod(M,t);
N1=mod(N,t);
if M1~=0I(M+1:M+t-M1,:)=0;
end
if N1~=0I(:,N+1:N+t-N1)=0;
end
[M,N]=size(I);  %补零后的行数和列数
SUM=M*N;%% 2.产生Logistic混沌序列
u=3.99;     %Logistic参数μ,自定为3.99
x0=sum(I(:))/(255*SUM);     %计算得出Logistic初值x0
x0=floor(x0*10^4)/10^4;     %保留4位小数
p=zeros(1,SUM+1000);        %预分配内存
p(1)=x0;
for i=1:SUM+999                 %进行SUM+999次循环,共得到SUM+1000点(包括初值)p(i+1)=u*p(i)*(1-p(i));
end
p=p(1001:length(p));            %去除前1000点,获得更好的随机性%% 3.将p序列变换到0~255范围内整数,转换成M*N的二维矩阵R
p=mod(ceil(p*10^3),256);
R=reshape(p,N,M)';  %转成M行N列的随机矩阵R%% 4.求解Chen氏超混沌系统
%求四个初值X0,Y0,Z0,H0
r=(M/t)*(N/t);      %r为分块个数
%求出四个初值
X0=sum(sum(bitand(I,3)))/(3*SUM);
Y0=sum(sum(bitand(I,12)/4))/(3*SUM);
Z0=sum(sum(bitand(I,48)/16))/(3*SUM);
H0=sum(sum(bitand(I,192)/64))/(3*SUM);
%保留四位小数
X0=floor(X0*10^4)/10^4;
Y0=floor(Y0*10^4)/10^4;
Z0=floor(Z0*10^4)/10^4;
H0=floor(H0*10^4)/10^4;
%根据初值,求解Chen氏超混沌系统,得到四个混沌序列
A=chen_output(X0,Y0,Z0,H0,r);
X=A(:,1);
X=X(1502:length(X));        %去除前1501项,获得更好的随机性(求解陈氏系统的子函数多计算了1500点)
Y=A(:,2);
Y=Y(1502:length(Y));
Z=A(:,3);
Z=Z(1502:length(Z));
H=A(:,4);
H=H(1502:length(H));%% 5.DNA编码
%X,Y分别决定I和R的DNA编码方式,有8种,1~8
%Z决定运算方式,有3种,0~2,0表示加,1表示减,2表示异或
%H表示DNA解码方式,有8种,1~8
X=mod(floor(X*10^4),8)+1;
Y=mod(floor(Y*10^4),8)+1;
Z=mod(floor(Z*10^4),3);
H=mod(floor(H*10^4),8)+1;
e=N/t;  %e表示每一行可以分为多少块
Q1=DNA_bian(fenkuai(t,I,1),X(1));
Q2=DNA_bian(fenkuai(t,R,1),Y(1));
Q_last=DNA_yunsuan(Q1,Q2,Z(1));
Q(1:t,1:t)=DNA_jie(Q_last,H(1));
for i=2:rQ1=DNA_bian(fenkuai(t,I,i),X(i));   %对原始图像每一个分块按X对应的序号进行DNA编码Q2=DNA_bian(fenkuai(t,R,i),Y(i));   %对R的每一个分块按Y对应的序号进行DNA编码Q3=DNA_yunsuan(Q1,Q2,Z(i));         %对上面两个编码好的块按Z对应的序号进行DNA运算Q4=DNA_yunsuan(Q3,Q_last,Z(i));     %运算结果在和前一块按Z对应的序号再一次进行运算,称为扩散Q_last=Q4;xx=floor(i/e)+1;yy=mod(i,e);if yy==0xx=xx-1;yy=e;endQ((xx-1)*t+1:xx*t,(yy-1)*t+1:yy*t)=DNA_jie(Q4,H(i));    %将每一块合并成完整的图Q
end
Q=uint8(Q);
imwrite(Q,'加密后的lena.bmp','bmp');
figure;imshow(Q);title('加密后图片');
figure;imhist(Q);title('加密后直方图');
axis([0 255 0 2000]);%% 加密后信息熵
T2=imhist(Q);
S2=sum(T2);
xxs2=0;
for i=1:256pp2=T2(i)/S2;if pp2~=0xxs2=xxs2-pp2*log2(pp2);end
end%% 加密图像相邻图像相关性分析
%{先随机在0~M-1行和0~N-1列选中1000个像素点,
计算水平相关性时,选择每个点的相邻的右边的点;
计算垂直相关性时,选择每个点的相邻的下方的点;
计算对角线相关性时,选择每个点的相邻的右下方的点。
%}
Q=double(Q);
EX2=0;EY2_SP=0;DX2=0;DY2_SP=0;COVXY2_SP=0;    %水平
EY2_CZ=0;DY2_CZ=0;COVXY2_CZ=0;    %垂直
EY2_DJX=0;DY2_DJX=0;COVXY2_DJX=0;   %对角线
for i=1:NN%第一个像素点的E,水平、垂直、对角线时计算得出的第一个像素点的E相同,统一用EX2表示EX2=EX2+Q(x1(i),y1(i));%第二个像素点的E,水平、垂直、对角线的E分别对应EY2_SP、EY2_CZ、EY2_DJXEY2_SP=EY2_SP+Q(x1(i),y1(i)+1);EY2_CZ=EY2_CZ+Q(x1(i)+1,y1(i));EY2_DJX=EY2_DJX+Q(x1(i)+1,y1(i)+1);
end
%统一在循环外除以像素点对数1000,可减少运算次数
EX2=EX2/NN;
EY2_SP=EY2_SP/NN;
EY2_CZ=EY2_CZ/NN;
EY2_DJX=EY2_DJX/NN;
for i=1:NN%第一个像素点的D,水平、垂直、对角线时计算得出第一个像素点的D相同,统一用DX2表示DX2=DX2+(Q(x1(i),y1(i))-EX2)^2;%第二个像素点的D,水平、垂直、对角线的E分别对应DY2_SP、DY2_CZ、DY2_DJXDY2_SP=DY2_SP+(Q(x1(i),y1(i)+1)-EY2_SP)^2;DY2_CZ=DY2_CZ+(Q(x1(i)+1,y1(i))-EY2_CZ)^2;DY2_DJX=DY2_DJX+(Q(x1(i)+1,y1(i)+1)-EY2_DJX)^2;%两个相邻像素点相关函数的计算,水平、垂直、对角线COVXY2_SP=COVXY2_SP+(Q(x1(i),y1(i))-EX2)*(Q(x1(i),y1(i)+1)-EY2_SP);COVXY2_CZ=COVXY2_CZ+(Q(x1(i),y1(i))-EX2)*(Q(x1(i)+1,y1(i))-EY2_CZ);COVXY2_DJX=COVXY2_DJX+(Q(x1(i),y1(i))-EX2)*(Q(x1(i)+1,y1(i)+1)-EY2_DJX);
end
%统一在循环外除以像素点对数1000,可减少运算次数
DX2=DX2/NN;
DY2_SP=DY2_SP/NN;
DY2_CZ=DY2_CZ/NN;
DY2_DJX=DY2_DJX/NN;
COVXY2_SP=COVXY2_SP/NN;
COVXY2_CZ=COVXY2_CZ/NN;
COVXY2_DJX=COVXY2_DJX/NN;
%水平、垂直、对角线的相关性
RXY2_SP=COVXY2_SP/sqrt(DX2*DY2_SP);
RXY2_CZ=COVXY2_CZ/sqrt(DX2*DY2_CZ);
RXY2_DJX=COVXY2_DJX/sqrt(DX2*DY2_DJX);%% 输出数据信息
disp('加密成功');
disp(['密钥1:μ=',num2str(u),'     密钥2:x0=',num2str(x0),'    密钥3:x(0)=',num2str(X0)]);
disp(['密钥4:y(0)=',num2str(Y0),'  密钥2:z(0)=',num2str(Z0),'   密钥3:h(0)=',num2str(H0)]);
disp(['原始图片信息熵=',num2str(xxs1),'  加密后图片信息熵=',num2str(xxs2)]);
disp(['原始图片相关性:','  水平相关性=',num2str(RXY1_SP),'  垂直相关性=',num2str(RXY1_CZ),'  对角线相关性=',num2str(RXY1_DJX)]);
disp(['加密图片相关性:','  水平相关性=',num2str(RXY2_SP),'  垂直相关性=',num2str(RXY2_CZ),'  对角线相关性=',num2str(RXY2_DJX)]);

三、运行结果






四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

【图像加密】基于matlab DNA混沌系统图像加密【含Matlab源码 1190期】相关推荐

  1. 【图像加密】DNA混沌系统图像加密【含Matlab源码 1190期】

    ⛄一.DNA混沌系统图像加密简介 基于DNA编码的图像加密,采用将图像分块进行DNA编码,通过CHEN超混沌系统产生密钥,进行特殊的DNA运算后解码得到加密后的图像. Logistic混沌置乱,先不说 ...

  2. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  3. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  4. 【Matlab车牌识别】停车计费系统【含GUI源码 735期】

    一.代码运行视频(哔哩哔哩) [Matlab车牌识别]停车计费系统[含GUI源码 735期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLA ...

  5. 【Matlab语音加密】语音信号加密解密(带面板)【含GUI源码 181期】

    一.代码运行视频(哔哩哔哩) [Matlab语音加密]语音信号加密解密(带面板)[含GUI源码 181期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆 ...

  6. 【Matlab指纹识别】指纹识别门禁系统【含GUI源码 1692期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别门禁系统[含GUI源码 1692期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继 ...

  7. 【Matlab指纹识别】指纹识别匹配门禁系统【含GUI源码 587期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别匹配门禁系统[含GUI源码 587期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  8. 【Matlab水果识别】苹果质量检测及分级系统(带面板)【含GUI源码 1613期】

    一.代码运行视频(哔哩哔哩) [Matlab水果识别]苹果质量检测及分级系统(带面板)[含GUI源码 1613期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  9. 基于JAVA校园外卖系统Web端计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA校园外卖系统Web端计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA校园外卖系统Web端计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 ...

  10. SSM框架基于JavaWeb在线投票系统的设计与实现源码

     博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 SSM框架基于JavaWeb在线投票系统的设计与实现源码 视频效果 SSM框架基 ...

最新文章

  1. 在cuDNN中简化Tensor Ops
  2. 推荐一位资深 Python 大佬
  3. uniapp网络请求获取数据_2.uni-app 发起网络请求
  4. 新计算机 安装win2000,图文教程!Windows 2000安装过程全接触
  5. 已解决:手动打包war包结果无法在Tomcat中部署
  6. 新浪微博客户端(26)-添加转发评论工具条
  7. 利用hexo搭建一个只属于你自己的博客
  8. 求解Catalan数,(大数相乘,大数相除,大数相加)
  9. 利用递归,反射,注解等,手写Spring Ioc和Di 底层(喷倒面试官
  10. 史上最全的自动驾驶研究报告(下)
  11. 蝴蝶网络 Butterfly network
  12. 3DMAX安装未完成,某些产品无法安装的解决方法
  13. 解析电源设计1-储能元件-电容
  14. JAVA毕业设计HTML5“牧经校园疫情防控网站”设计与实现计算机源码+lw文档+系统+调试部署+数据库
  15. Unity3d C#通过使用大华SDK控制大华摄像头旋转、变焦等云台操作和预置点等控制操作(含源码)
  16. Python编程——多进程与多线程编程(附实例)
  17. PHP语法糖->,::和=>
  18. 沃尔玛ERP系统定制哪家好?
  19. linux下nginx修改ip,通过域名ip进入网页
  20. Hadoop生态系统详解

热门文章

  1. WebStorm中常用的快捷键及使用技巧
  2. 合并基因表达水平(merge gene expression levels, FPKM)
  3. OpenGL蓝宝书第五章代码勘误以及惯性坐标系去解释模型变换:Pyramid.cpp
  4. Oracle表名、列名、约束名的长度限制
  5. Java自带的keytool命令
  6. IIS安装程序无法复制文件的问题 安装IIS提示安装程序无法复制文件staxmem.d...
  7. 让Cygwin支持中文
  8. 20191112每日一句
  9. Atitit io读取文件法 目录 1. 文件法 1 1.1. 异步读取文件: 1 1.2. 2.同步读取方法 1 1.3. 二进制读文件: 1 2. 读取api规范 1 3. Atitit 按照
  10. Atitit 装备工具分类 attilax总结 艾龙著 工具链体系 武器与软件行业工具也是很近似的的。 1. 分类思维 1 1.1. 总分类:冷、热 1 1.2. 轻、重、大规模杀伤性 1