基于混沌的一般彩色图像加密算法的Matlab实现
目录
- 基于混沌的一般彩色图像加密算法的Matlab实现
- Matlab代码(密文无损压缩图像保存)
- 加解密效果
基于混沌的一般彩色图像加密算法的Matlab实现
说明:
- 混沌系统使用Loren连续混沌系统,使用四阶龙格库塔法将其离散化
- 加密方法使用基于空域的像素置乱-扩散结构
- 密文只能以无损压缩方式保存或分发,例如.bmp
Matlab代码(密文无损压缩图像保存)
clc;clear;close all;
P=imread('房屋.tiff'); %载入图片
figure;
subplot(1,3,1);
imshow(uint8(P));
title('房屋明文');P_R=P(:,:,1);P_G=P(:,:,2);P_B=P(:,:,3);[M,N]=size(P_R); %计算图片P尺寸大小
P=double(P); %将图像转化为双精度类型%% 第一部分
%产生混沌随机序列
n=2*M*N; %计算所需要的序列长度
h=0.002; t=800;
a=10; b=8/3; c=28; r =-1;
x0=1.1; y0=2.2; z0=3.3; w0=4.4;
s=zeros(1,n);tic;
%利用四阶龙格库塔法将超Lorenz混沌系统离散化的计算过程
for i=1:n+tK11=a*(y0-x0); %x0表示xiK12=a*(y0-(x0+K11*h/2))+w0;K13=a*(y0-(x0+K12*h/2))+w0;K14=a*(y0-(x0+K13*h))+w0;x1=x0+(K11+2*K12+2*K13+K14)*h/6; %x1表示xi+1K21=c*x1-y0-x1*z0; K22=c*x1-(y0+K21*h/2)-x1*z0;K23=c*x1-(y0+K22*h/2)-x1*z0;K24=c*x1-(y0+K23*h)-x1*z0;y1=y0+(K21+2*K22+2*K23+K24)*h/6; K31=x1*y1-b*z0; K32=x1*y1-b*(z0+K31*h/2);K33=x1*y1-b*(z0+K32*h/2);K34=x1*y1-b*(z0+K33*h);z1=z0+(K31+2*K32+2*K33+K34)*h/6;K41=-y1*z1-r*w0; K42=-y1*z1+r*(w0+K41*h/2);K43=-y1*z1+r*(w0+K42*h/2);K44=-y1*z1+r*(w0+K43*h);w1=z0+(K41+2*K42+2*K43+K44)*h/6;%把第i次的输出送给第i+1次的输入x0=x1;y0=y1;z0=z1;w0=w1; %每3000次迭代后对混沌状态x0进行小的扰动if i>ts(i-t)=x1;if mod((i-t),3000)==0x0=x0+h*sin(x0);endendend%%
%s转化为整数类型的伪随机序列X,长度为M*N,整数不大于10*max(M,N)
X=mod(floor((s+100)*10^10),10*max(M,N))+1;
%用序列s生成2*M*N的扩散伪随机序列S
S=mod(floor(s*pow2(16)),256);%%
a=X(1:M*N); %用向量X生成M*N的置乱伪随机序列a,b
b=X(M*N+1:2*M*N);
S1=S(1:M*N); %用于正向扩散的伪随机序列,即密码
S2=S(M*N+1:2*M*N); %用于逆向扩散的伪随机序列,即密码%% 加密算法
%置乱,利用Arnold矩阵对图像A置乱A=P_R(:); %将图像分量P_R分量转化成一维向量A
for i=1:M*Nq=mod(b(i)+a(i)*i,M*N)+1; % q是变换后的坐标A_i=A(i);A(i)=A(q);A(q)=A_i;
end
A=reshape(A,M,N); %密文A%%正向扩散,基于异或运算的扩散处理
A=A(:); %将图像矩阵转为一维向量A
B0=0; %正向扩散密钥
B=zeros(1,M*N); %正向扩散结果
B(1)=bitxor(bitxor(B0,S1(1)),A(1));
for i=2:M*NB(i)=bitxor(bitxor(B(i-1),S1(i)),A(i));
end%逆向扩散
C0=0; %逆向扩散密钥
C=zeros(1,M*N); %逆向扩散结果
C(M*N)=bitxor(bitxor(C0,S2(M*N)),B(M*N));
for i=M*N-1:-1:1C(i)=bitxor(bitxor(C(i+1),S2(i)),B(i));
end
C_R=reshape(C,M,N); %密文图像分量C_RA=P_G(:); %将分量P_G转化成一维向量A
for i=1:M*Nq=mod(b(i)+a(i)*i,M*N)+1; % q是变换后的坐标A_i=A(i);A(i)=A(q);A(q)=A_i;
end
A=reshape(A,M,N); %密文A%正向扩散,基于异或运算的扩散处理
A=A(:); %将图像矩阵转为一维向量AB0=0; %正向扩散密钥
B=zeros(1,M*N); %正向扩散结果
B(1)=bitxor(bitxor(B0,S1(1)),A(1));
for i=2:M*NB(i)=bitxor(bitxor(B(i-1),S1(i)),A(i));
end%逆向扩散
C0=0; %逆向扩散密钥
C=zeros(1,M*N); %逆向扩散结果
C(M*N)=bitxor(bitxor(C0,S2(M*N)),B(M*N));
for i=M*N-1:-1:1C(i)=bitxor(bitxor(C(i+1),S2(i)),B(i));
end
C_G=reshape(C,M,N); %密文图像分量C_GA=P_B(:); %将图像分量P_B转化成一维向量A
for i=1:M*Nq=mod(b(i)+a(i)*i,M*N)+1; % q是变换后的坐标A_i=A(i);A(i)=A(q);A(q)=A_i;
end
A=reshape(A,M,N); %密文A%扩散,基于异或运算的扩散处理
A=A(:); %将图像矩阵转为一维向量AB0=0; %正向扩散密钥
B=zeros(1,M*N); %正向扩散结果
B(1)=bitxor(bitxor(B0,S1(1)),A(1));
for i=2:M*NB(i)=bitxor(bitxor(B(i-1),S1(i)),A(i));
end%逆向扩散
C0=0; %逆向扩散密钥
C=zeros(1,M*N); %逆向扩散结果
C(M*N)=bitxor(bitxor(C0,S2(M*N)),B(M*N));
for i=M*N-1:-1:1C(i)=bitxor(bitxor(C(i+1),S2(i)),B(i));
end
C_B=reshape(C,M,N); %密文图像分量C_B%% 密文
C=cat(3,C_R,C_G,C_B);
subplot(1,3,2);
imshow(uint8(C));
title('房屋密文');imwrite(uint8(C),'房屋密文.bmp'); %以无损压缩方法保存密文
% imwrite(uint8(C),'房屋密文.jp2','CompressionRatio',5); %以有损压缩方法保存密文%% 解密算法C=imread('房屋密文.bmp');
% C=imread('房屋密文.jp2');
C_R=C(:,:,1);C_G=C(:,:,2);C_B=C(:,:,3);%图像解密处理
%逆向扩散还原
C=C_R(:);
D0=0;
D=zeros(1,M*N);
D(M*N)=bitxor(bitxor(D0,S2(M*N)),C(M*N));
for i=M*N-1:-1:1D(i)=bitxor(bitxor(C(i+1),S2(i)),C(i));
end%正向扩散还原图像
E0=0;
E=zeros(1,M*N);
E(1)=bitxor(bitxor(E0,S1(1)),D(1));
for i=2:M*NE(i)=bitxor(bitxor(D(i-1),S1(i)),D(i));
endE=reshape(E,M,N); %解密明文E%置乱还原
F=E(:);
for i=M*N:-1:1q=mod(b(i)+a(i)*i,M*N)+1; % q是变换后的坐标F_i=F(i);F(i)=F(q);F(q)=F_i;
end
F_R=reshape(F,M,N);C=C_G(:);
D0=0;
D=zeros(1,M*N);
D(M*N)=bitxor(bitxor(D0,S2(M*N)),C(M*N));
for i=M*N-1:-1:1D(i)=bitxor(bitxor(C(i+1),S2(i)),C(i));
end%正向扩散还原图像
E0=0;
E=zeros(1,M*N);
E(1)=bitxor(bitxor(E0,S1(1)),D(1));
for i=2:M*NE(i)=bitxor(bitxor(D(i-1),S1(i)),D(i));
end
E=reshape(E,M,N); %解密明文E%置乱还原
F=E(:);
for i=M*N:-1:1q=mod(b(i)+a(i)*i,M*N)+1; % q是变换后的坐标F_i=F(i);F(i)=F(q);F(q)=F_i;
end
F_G=reshape(F,M,N);C=C_B(:);
D0=0;
D=zeros(1,M*N);
D(M*N)=bitxor(bitxor(D0,S2(M*N)),C(M*N));
for i=M*N-1:-1:1D(i)=bitxor(bitxor(C(i+1),S2(i)),C(i));
end%正向扩散还原图像
E0=0;
E=zeros(1,M*N);
E(1)=bitxor(bitxor(E0,S1(1)),D(1));
for i=2:M*NE(i)=bitxor(bitxor(D(i-1),S1(i)),D(i));
end
E=reshape(E,M,N); %解密明文E%置乱还原
F=E(:);
for i=M*N:-1:1q=mod(b(i)+a(i)*i,M*N)+1; % q是变换后的坐标F_i=F(i);F(i)=F(q);F(q)=F_i;
end
F_B=reshape(F,M,N);%% 解密明文
F=cat(3,F_R,F_G,F_B);
toc; %关闭秒表计数器subplot(1,3,3);
imshow(uint8(F));
title('房屋密文解密图像')
imwrite(uint8(F),'房屋密文解密.bmp'); %以无损压缩方法保存图像
% imwrite(uint8(F),'房屋密文解密.jp2','Mode','lossless');%以有损压缩方法保存密文
加解密效果
基于混沌的一般彩色图像加密算法的Matlab实现相关推荐
- 混沌图像加密matlab,基于复合混沌系统的彩色图像加密算法及Matlab实现
第27卷 第3期 湖 南 城 市 学 院 学 报 (自然科学版) Vol. 27 No.3 2018年5月 Journal of Hunan City University (Natural Scie ...
- 基于混沌的图像置乱加密算法及matlab的实现,基于混沌的图像置乱加密算法及MATLAB的实现...
基于混沌的图像置乱加密算法及MATLAB的实现 提出了一种基于混沌映射的图像置乱加密算法.借助MATLAB6.5软 (本文共3页) 阅读全文>> 数字水印(Digital Watermar ...
- 【图像加密】基于混沌系统进行灰度图像加密附Matlab代码
1 简介 1 基于混沌系统的图像加密解密 Logistic混沌置乱,先不说有多复杂,其实很简单. Logistic函数是源于一个人口统计的动力学系统,其系统方程形式如下: **X(k+1) = u ...
- 基于混沌系统的文本加密算法研究(二)——经典混沌映射
基于混沌系统的文本加密算法研究(二)--经典混沌映射 前言 一.一维Logistic混沌映射 二.二维Henon混沌映射 三.三维Lorenz连续混沌映射 总结 代码 1.Logistic映射 2.H ...
- 基于混沌映射的文本加密算法研究系列
基于混沌映射的文本加密算法研究(四) 前言 一.传统DES密码算法 二.典型的文本混沌加密算法 1.Logistic映射 2.Henon映射 3.Lorenz映射 4.Hodgkin-Huxley模型 ...
- 基于混沌系统的文本加密算法研究系列
基于混沌系统的文本加密算法研究(三) 前言 一. Hodgkin-Huxley模型的数学形式 2.Hodgkin-Huxley模型的混沌分析 (1)外部电流为混沌序列 (2)外部电流为周期性刺激电流 ...
- 【图像加密】基于混沌系统的图像加密解密matlab源码含GUI
Logistic混沌置乱,先不说有多复杂,其实很简单. Logistic函数是源于一个人口统计的动力学系统,其系统方程形式如下: X(k+1) = u * X(k) * [1 - X(k)],(k=0 ...
- 实现图片打乱_基于混沌Logistic加密算法的图片加密与还原
基于混沌Logistic加密算法的图片加密与还原 摘要 一种基于混沌Logistic加密算法的图片加密与还原的方法,并利用Lena图和Baboon图来验证这种加密算法的加密效果.为了能够体现该算法在图 ...
- 混沌加密算法python_基于混沌Logistic加密算法的图片加密与还原
摘要 一种基于混沌Logistic加密算法的图片加密与还原的方法,并利用Lena图和Baboon图来验证这种加密算法的加密效果.为了能够体现该算法在图片信息加密的效果,本文还采用了普通行列置乱加密算法 ...
最新文章
- Ubuntu Linux 下优化 swap 交换分区及调整swap大小
- source insight使用
- 软件开发工具介绍之 1.代码生成器
- Java实现身份证号码的验证,JAVA后台验证身份证号码
- raspberry pi_Raspberry Pi项目旨在调节室温并改善睡眠
- 0626 Django模型(ORM)
- MVC LinqToSql Json DbComparisonExpression 需要具有可比较类型的参数。
- opencv 编译报错(CMake Error: The following variables are used in this project, but they are set to not )
- 计算机图形学——简单图形绘制
- EV SSL证书对网站的作用
- Java面试之Java基础篇(offer 拿来吧你)
- 系统测试之功能测试:测试用例的设计步骤——从登陆开始说起
- 计算机导论期末自测题,计算机导论期末习题da
- SpringBoot2.x(三)热部署devtool和配置文件自动注入实战
- 飞机游戏中子弹与飞机的移动与边界源码
- 进制转换(二进制,八进制,十进制)
- java循环练习题及答案_循环练习题及答案
- 排查腾讯云服务器被挖矿病毒【pnscan】挟持
- CXF框架发布WebService服务的例子
- C#中Winfrom默认输入法的设置方法