基于混沌Logistic加密算法的图片加密与还原
摘要
一种基于混沌Logistic加密算法的图片加密与还原的方法,并利用Lena图和Baboon图来验证这种加密算法的加密效果。为了能够体现该算法在图片信息加密的效果,本文还采用了普通行列置乱加密算法和像素点的RGB的值的缩放算法这两种算法对相同的图片的图片进行处理,利用matlab通过显示加密过后的图片以及直方图分析可以很直观的发现混沌Logistic加密算法对图片信息加密的效果更好,并且很好地隐藏了原始图像的统计特性,能够有效地抵御基于图像像素值的统计攻击,达到了图像加密的效果。
混沌Logistic映射的理论
混沌的基本概念
1975年,美国数学家约克和美籍华人李天岩发表了《周期3意味着混沌》的文章,首次提出了“混沌”—词,阐述了混沌的数学定义,对混沌学的发展具有重大意义。自此以后,混沌研究开始蓬勃发展。
混沌是指在确定性动力学系统中,由于对初值敏感而表现出的类似随机的、不可预测的运动。混沌是确定的非线性系统中出现的内在随机性现象,其变化并非随机确貌似随机。
Logistic映射方程
Logistic映射是一个典型的非线性的迭代方程,如式所示:

称为Logistic映射的控制参数,对任意的k有
,其中k为迭代时间步。Logistic映射的动态行为与控制参数u密切相关 ,对于不同的u值系统将呈现不同的特性(即当k趋于无穷大,xk的变化情况)。其中Logistic映射有两个主要的参数,一个是初值x0,一个是系统参数μ,研究表明,当 0<μ<=3.5699456时,Logistic呈现出周期性;而当映射方程满足0<x0<1和3.5699456<μ<=4这两个条件时,Logistic映射处于混沌状态 ,即一种无序的、不可预测的、混乱的、摸不到头、摸不到尾的状态。对给定的初始值x0,生成的序列是非周期性、非收敛以及对初始条件敏感的。
有界性
混沌是有界的,它的运动轨线始终局限于一个确定的区域,这个区域称为混沌吸引域。由图 所示,无论控制参数μ怎么变,迭代值xn始终在(0,1)之间。
不同控制参数μ下的Logistic分岔图

混沌Logistic映射与其他加密算法介绍
普通行列置乱加密算法
普通置乱加密算法的流程
将读入的水印图片,先获取图片的大小,得到原始图片矩阵,首先随机打乱各行,输出打乱后的矩阵,再将这个矩阵随机打乱各列,最后图像成功加密,显示加密图像。算法流程框图如图:

算法分析
s = size(handles.img);
% 将picture分为3列,每列768/3=256个元素
%%% 随机打乱各行进行加密
% 不放回的均匀分布的从1到s(1)取整数,个数为s(1)抽样
r = randsample(s(1), s(1)); % r为256*1的矩阵,得到256个不相同的数
RGBS = handles.img(r, :, :); % 得到一个256*256的图像矩阵
%%% 随机打乱各列进行加密
c = randsample(s(2), s(2)); % c为256*1的矩阵,得到256个不相同的数
RGBSS = RGBS(:, c, :);
axes(handles.axes2); %定义图形区域axes2
imshow(RGBSS);
title('普通置乱加密图像');
figure(2);
hist_im=histogram(RGBSS); %加密后直方图
title('普通置乱加密直方图');
像素点的RGB值缩放加密
像素点的RGB值缩放加密算法的流程
首先读入原始图片,通过size获取水印图片的大小矩阵,接着获取图片各R、G、B的值,然后将获取到的RGB值分别扩大20倍并将值赋给r,最后再将r与将水印图片转换成double类型的矩阵进行点乘运算实现图像的成功加密。算法流程框图如图:

算法分析
s = size(handles.img);
r = rand(s(1), s(2), s(3)) * 20;% 将原始图片的RGB值分别扩大20倍
RGBD = im2double(handles.img);
RGB_jiami = RGBD .* r;
axes(handles.axes2); %定义图形区域axes2
imshow(RGB_jiami);
title('像素点的RGB值缩放加密图像');
figure(3);
hist_im=histogram(RGB_jiami); %加密后直方图
title('像素点的RGB值缩放加密直方图');
混沌Logistic映射加密算法
混沌Logistic映射加密算法模型
读入待处理的原始图片,通过加密密钥进入混沌序列,通过混沌系统设计加密算法,实现加密目的;再输入解密密钥,把加密过程逆向运算即可得到解密图像。系统参数u和初值x0设置成密钥。混沌Logistic映射加密算法模型如图:

当迭代n次后,我们就得到了x1、x2、…,xn这n个值,这就是一个混沌序列,是一维的,称作序列A,也就是我们想要得到的序列,在MATLAB中,可以看出xi(i=1,2,…,n)的取值是在(0,1)之间的,就像图像灰度值是在(0,255)之间一样。那么我们把这个一维序列归一化到(0,255)之间得到序列B。异或过程如图:

算法分析
% x=0.1; % 定义初值x(0)=0.1
u=4; % 定义参数u=4
%迭代500次,达到充分混沌状态
for i=1:500
x=u*x*(1-x);
end
fprintf('x(k+1)=%d\n',x); % 输出迭代后的x的值
% picture是水印,D是水印对应的矩阵
% Imgn是混沌矩阵,Rod是水印与混沌异或结果
% img是还原出来的水印
%产生一维混沌加密序列
A=zeros(1,M*N); % 产生一个1-M*N的double类型的矩阵
A(1)=x; % 定义一维混沌初值
for i=1:M*N-1
A(i+1)=u*A(i)*(1-A(i));
end
%归一化序列
B=uint8(255*A); % 产生一个1*M×N的uint8类型的矩阵
% 转化为二维混沌加密序列
% 将矩阵B的元素返回到一个M×N的矩阵Imgn,其中Imgn是混沌矩阵
Imgn=reshape(B,M,N); % 按照列的顺序进行转换的,也就是第一列读完,读第二列,按列存放
C=zeros(M,N);
for x=1:M
for y=1:N
C(x,y)=handles.img(x,y);
end
end
C;
D=uint8(C); % D是水印图像对应的矩阵
%异或操作加密(Logistic混沌序列加密)
Rod=bitxor(D,Imgn); %异或操作加密(水印矩阵和二维混沌序列异或结果)
Rod;
%转化成uint8后图像会变成二维,原来的picture是256*256*3的三通道后面转换成256*768了,
%显示是三个图片,用rgb分别显示了,合成一个图片要用reshape(Rod,M,N/3,3)转化回去
rod=reshape(Rod,M,N/3,3); % 把Rod中元素进行重塑成M×N/3×3的矩阵
验证与性能分析
Matlab GUI操作界面
使用的是MATLAB GUI可视化仿真平台。它是采用图形方式显示的计算机操作用户界面,是MATLAB用户可视化交互式的工具,运用GUI生成的操作界面用户可以不用浏览繁冗的代码而进行操作。如图是设计的GUI操作界面

看到这个界面是不是很不错,对的。。。你没看错MATLAB GUI确实是这么厉害。。。。。。。
普通行列置乱加密实现
Lena原图像、加密图像、解密图像

Baboon原图像、加密图像、解密图像

像素点的RGB值的缩放加密实现
Lena原图像、加密图像、解密图像

Baboon原图像、加密图像、解密图像

混沌Logistic映射加密实现
Lena原图像、加密图像、解密图像

Baboon原图像、加密图像、解密图像

直方图性能分析
这里就只对lena图进行直方图分析,Baboon图大致和lena图一样。
Lena图的普通置乱与混沌Logistic加密的直方图

普通行列置乱图像的直方图与原始图像的直方图相同,且像素点的分布都不均匀,而混沌Logistic加密图像的直方图的像素点分布相对均匀,很好地隐藏了原始图像的统计特性,达到了图像加密的效果。
Lena图的像素点的RGB缩放与混沌Logistic加密的直方图

由直方图可知:像素点的RGB缩放图像的直方图与原始图像的直方图不相同且像素点的分布都不均匀,而混沌Logistic加密图像的直方图的像素点分布相对均匀,很好地隐藏了原始图像的统计特性。
完整代码以上传至我的github:完整代码
资源传送门
- 关注【做一个柔情的程序猿】公众号
- 在【做一个柔情的程序猿】公众号后台回复 【python资料】【2020秋招】 即可获取相应的惊喜哦!
「️ 感谢大家」
- 点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
- 欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程。
你的三连击是我的荣幸!!!!!
基于混沌Logistic加密算法的图片加密与还原的更多相关文章
- 基于RC4加密算法的图像加密
基于RC4加密算法的图像加密 某课程的一个大作业内容,对图像加密.项目地址:https://gitee.com/jerry323/RC4_picture 这里使用的是RC4(流.对称)加密算法,算法流 ...
- .NET中的加密算法总结(自定义加密Helper类续)
1.1.1 摘要 相信许多人都使用过.NET提供的加密算法,而且在使用的过程我们必须了解每种加密算法的特点(对称或非对称,密钥长度和初始化向量等等).我也看到过很多人写过.NET中加密算法总结,但我发 ...
- 基于HTML5 Canvas实现的图片马赛克模糊特效
效果请点击下面网址: http://hovertree.com/texiao/html5/1.htm 一.开门见山受美国肖像画家Chuck Close的启发,此脚本通过使用HTML5 canvas元素 ...
- cocos2dx 3.x(TexturePacker进行图片加密)
游戏开发过程中要涉及到大量的图片,使用TexturePacker可以把小图合成大图.这是我们使用最多的功能,但是TexturePacker还带有对图片加密的功能.之前还是对加密不慎了解,所以写下来分享 ...
- 基于html5页面滚动背景图片动画效果
基于html5页面滚动背景图片动画效果是一款带索引按钮的页面滚动动画特效代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div id="fullpage&q ...
- 图片流量节省大杀器:基于CDN的sharpP自适应图片技术实践
版权声明:本文由陈忱原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/156 来源:腾云阁 https://www.qclou ...
- php实现图片加密解密,支持加盐
一个简单的图片加解密函数 使用client跑,不要使用浏览器跑 qq845875470 ,技术交流 <?php /** * Created by hello. * User: qq 845875 ...
- 基于jQuery带标题的图片3D切换焦点图
今天给大家分享一款基于jQuery带标题的图片3D切换焦点图.这款焦点图适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 实现的代码. htm ...
- 基于SIFT+Kmeans+LDA的图片分类器的实现
原地址:http://www.cnblogs.com/freedomshe/archive/2012/04/24/2468747.html 题记:2012年4月1日回到家,南大计算机研究僧复试以后,等 ...
随机推荐
- MATLAB中的参数估计函数详解及调用示例【联合整理】
前言 因为最近项目上的需要,才发现MATLAB的统计工具箱中的参数估计函数,觉得很简单很好用,现在把所有的参数估计函数整理一下,并在最后面附上调用示例. 参与人员 由于时间关系,这篇随笔是两个人一起整 ...
- Hadoop基础------>MR框架-->WordCount
认识Mapreduce Mapreduce编程思想 Mapreduce执行流程 java版本WordCount实例 1. 简介: Mapreduce源于Google一遍论文,是谷歌Mapreduce的 ...
- 计算机网络:TCP协议建立连接的过程为什么是三次握手而不是两次?【对于网上的两种说法我的思考】
网上关于这个问题吵得很凶,但是仔细看过之后我更偏向认为两种说的是一样的. 首先我们来看看 TCP 协议的三次握手过程 如上图所示: 解释一下里面的英文: 里面起到作用的一些标志位就是TCP报文首部里的 ...
- Azure DevOps 扩展之 Hub 插件的菜单权限控制配置
这是 Hub 插件的描述配置代码片段: { "contributions": [ { "id": "feature-hidden-fields-man ...
- JavaMail 发送邮件出现 Connection reset 问题
问题描述 使用 java mail 发送邮件的时候,申请的 163 邮箱作为发件箱,然无论如何配置,均出现 Connection reset,无法正常发送邮件. Exception in thread ...
- LeetCode 热题 HOT 100(05,正则表达式匹配)
LeetCode 热题 HOT 100(05,正则表达式匹配) 不够优秀,发量尚多,千锤百炼,方可成佛. 算法的重要性不言而喻,无论你是研究者,还是最近比较火热的IT 打工人,都理应需要一定的算法能力 ...
- 嗯,挺全乎儿的,Spring Boot 多环境配置都在这里了,你喜欢哪种?
持续原创输出,点击上方蓝字关注我 目录 前言 Spring Boot 自带的多环境配置 创建不同环境的配置文件 指定运行的环境 Maven 的多环境配置 创建多环境配置文件 定义激活的变量 pom 文 ...
- Nagios 告警配置太复杂?CA简单实现Nagios自定义多功能告警
Nagios 是一个插件式的监控系统,可以监控服务的运行状态和网络信息等,并能监视所指定的本地或远程主机参数以及服务,同时提供异常告警通知功能等.Nagios 支持客户端的数据采集,通过编写客户端插件 ...
- Docker(33)- 如何修改 docker 容器的端口映射
如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 问题背景 docker run ...
- mysql建立索引,实际工作中建立索引的示例
1.根据业务场景建立相应的组合索引,一般是在主键,外键,常用来筛选查询的字段,按照字段之间组合的紧密程度,建立一定顺序的索引. 例如:为 t_org_exam_join_member_day 建立索 ...