目录

  • 基于混沌的一般彩色图像加密算法的Matlab实现
    • Matlab代码(密文无损压缩图像保存)
    • 加解密效果

基于混沌的一般彩色图像加密算法的Matlab实现

说明:

  1. 混沌系统使用Loren连续混沌系统,使用四阶龙格库塔法将其离散化
  2. 加密方法使用基于空域的像素置乱-扩散结构
  3. 密文只能以无损压缩方式保存或分发,例如.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实现相关推荐

  1. 混沌图像加密matlab,基于复合混沌系统的彩色图像加密算法及Matlab实现

    第27卷 第3期 湖 南 城 市 学 院 学 报 (自然科学版) Vol. 27 No.3 2018年5月 Journal of Hunan City University (Natural Scie ...

  2. 基于混沌的图像置乱加密算法及matlab的实现,基于混沌的图像置乱加密算法及MATLAB的实现...

    基于混沌的图像置乱加密算法及MATLAB的实现 提出了一种基于混沌映射的图像置乱加密算法.借助MATLAB6.5软 (本文共3页) 阅读全文>> 数字水印(Digital Watermar ...

  3. 【图像加密】基于混沌系统进行灰度图像加密附Matlab代码

    1 简介 ​ 1 基于混沌系统的图像加密解密 Logistic混沌置乱,先不说有多复杂,其实很简单. Logistic函数是源于一个人口统计的动力学系统,其系统方程形式如下: **X(k+1) = u ...

  4. 基于混沌系统的文本加密算法研究(二)——经典混沌映射

    基于混沌系统的文本加密算法研究(二)--经典混沌映射 前言 一.一维Logistic混沌映射 二.二维Henon混沌映射 三.三维Lorenz连续混沌映射 总结 代码 1.Logistic映射 2.H ...

  5. 基于混沌映射的文本加密算法研究系列

    基于混沌映射的文本加密算法研究(四) 前言 一.传统DES密码算法 二.典型的文本混沌加密算法 1.Logistic映射 2.Henon映射 3.Lorenz映射 4.Hodgkin-Huxley模型 ...

  6. 基于混沌系统的文本加密算法研究系列

    基于混沌系统的文本加密算法研究(三) 前言 一. Hodgkin-Huxley模型的数学形式 2.Hodgkin-Huxley模型的混沌分析 (1)外部电流为混沌序列 (2)外部电流为周期性刺激电流 ...

  7. 【图像加密】基于混沌系统的图像加密解密matlab源码含GUI

    Logistic混沌置乱,先不说有多复杂,其实很简单. Logistic函数是源于一个人口统计的动力学系统,其系统方程形式如下: X(k+1) = u * X(k) * [1 - X(k)],(k=0 ...

  8. 实现图片打乱_基于混沌Logistic加密算法的图片加密与还原

    基于混沌Logistic加密算法的图片加密与还原 摘要 一种基于混沌Logistic加密算法的图片加密与还原的方法,并利用Lena图和Baboon图来验证这种加密算法的加密效果.为了能够体现该算法在图 ...

  9. 混沌加密算法python_基于混沌Logistic加密算法的图片加密与还原

    摘要 一种基于混沌Logistic加密算法的图片加密与还原的方法,并利用Lena图和Baboon图来验证这种加密算法的加密效果.为了能够体现该算法在图片信息加密的效果,本文还采用了普通行列置乱加密算法 ...

最新文章

  1. Ubuntu Linux 下优化 swap 交换分区及调整swap大小
  2. source insight使用
  3. 软件开发工具介绍之 1.代码生成器
  4. Java实现身份证号码的验证,JAVA后台验证身份证号码
  5. raspberry pi_Raspberry Pi项目旨在调节室温并改善睡眠
  6. 0626 Django模型(ORM)
  7. MVC LinqToSql Json DbComparisonExpression 需要具有可比较类型的参数。
  8. opencv 编译报错(CMake Error: The following variables are used in this project, but they are set to not )
  9. 计算机图形学——简单图形绘制
  10. EV SSL证书对网站的作用
  11. Java面试之Java基础篇(offer 拿来吧你)
  12. 系统测试之功能测试:测试用例的设计步骤——从登陆开始说起
  13. 计算机导论期末自测题,计算机导论期末习题da
  14. SpringBoot2.x(三)热部署devtool和配置文件自动注入实战
  15. 飞机游戏中子弹与飞机的移动与边界源码
  16. 进制转换(二进制,八进制,十进制)
  17. java循环练习题及答案_循环练习题及答案
  18. 排查腾讯云服务器被挖矿病毒【pnscan】挟持
  19. CXF框架发布WebService服务的例子
  20. C#中Winfrom默认输入法的设置方法

热门文章

  1. ocpc php,研发相关 · 百度 oCPC 开发者文档
  2. 计算广告之淘宝oCPC智能出价
  3. 安装shipyard
  4. 如何隐藏、显示Excel工作表中的公式
  5. cadence软件安装教程
  6. 任泽平:中国收入分配报告2021最新白皮书
  7. 10 种为React应用程序设计样式的方法
  8. google drive加速下载
  9. 移动硬盘中安装ubuntu系统——Vmware Workstation安装
  10. ubuntu 禁用触摸板