摘要

一种基于混沌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:完整代码

资源传送门

  1. 关注【做一个柔情的程序猿】公众号
  2. 在【做一个柔情的程序猿】公众号后台回复 【python资料】【2020秋招】 即可获取相应的惊喜哦!

「️ 感谢大家」

  • 点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
  • 欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程。

你的三连击是我的荣幸!!!!!

基于混沌Logistic加密算法的图片加密与还原的更多相关文章

  1. 基于RC4加密算法的图像加密

    基于RC4加密算法的图像加密 某课程的一个大作业内容,对图像加密.项目地址:https://gitee.com/jerry323/RC4_picture 这里使用的是RC4(流.对称)加密算法,算法流 ...

  2. .NET中的加密算法总结(自定义加密Helper类续)

    1.1.1 摘要 相信许多人都使用过.NET提供的加密算法,而且在使用的过程我们必须了解每种加密算法的特点(对称或非对称,密钥长度和初始化向量等等).我也看到过很多人写过.NET中加密算法总结,但我发 ...

  3. 基于HTML5 Canvas实现的图片马赛克模糊特效

    效果请点击下面网址: http://hovertree.com/texiao/html5/1.htm 一.开门见山受美国肖像画家Chuck Close的启发,此脚本通过使用HTML5 canvas元素 ...

  4. cocos2dx 3.x(TexturePacker进行图片加密)

    游戏开发过程中要涉及到大量的图片,使用TexturePacker可以把小图合成大图.这是我们使用最多的功能,但是TexturePacker还带有对图片加密的功能.之前还是对加密不慎了解,所以写下来分享 ...

  5. 基于html5页面滚动背景图片动画效果

    基于html5页面滚动背景图片动画效果是一款带索引按钮的页面滚动动画特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id="fullpage&q ...

  6. 图片流量节省大杀器:基于CDN的sharpP自适应图片技术实践

    版权声明:本文由陈忱原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/156 来源:腾云阁 https://www.qclou ...

  7. php实现图片加密解密,支持加盐

    一个简单的图片加解密函数 使用client跑,不要使用浏览器跑 qq845875470 ,技术交流 <?php /** * Created by hello. * User: qq 845875 ...

  8. 基于jQuery带标题的图片3D切换焦点图

    今天给大家分享一款基于jQuery带标题的图片3D切换焦点图.这款焦点图适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 实现的代码. htm ...

  9. 基于SIFT+Kmeans+LDA的图片分类器的实现

    原地址:http://www.cnblogs.com/freedomshe/archive/2012/04/24/2468747.html 题记:2012年4月1日回到家,南大计算机研究僧复试以后,等 ...

随机推荐

  1. ABP 数据访问 - IRepository 仓储

    ABP系列,这个系列来的比较晚,很多大佬其实已经分析过,为什么现在我又来一轮呢? 1.想自己来完整的学习一轮ABP 2.公司目前正在使用ABP,准备迁移Core 基于以上的目的,开始这个系列 ABP ...

  2. ABAP CA CO CS CP 等操作符

    DATA: L_STR1 TYPE STRING, L_STR2 TYPE STRING. L_STR1 = 'ca'. "匹配字符 L_STR2 = 'hubab'. "被匹配字 ...

  3. Hadoop基础------>MR框架-->WordCount

    认识Mapreduce Mapreduce编程思想 Mapreduce执行流程 java版本WordCount实例 1. 简介: Mapreduce源于Google一遍论文,是谷歌Mapreduce的 ...

  4. uniapp微信小程序canvas绘图插入网络图片不显示

    网络图片缓存 在uni中wx可以用uni代替 无区别: 先把要插入的网络图片缓存(getImageInfo); let context = uni.createCanvasContext('first ...

  5. numpy的统计分析

    一.排序 间接排序(argsort,lexsort) 根据一个或多个数据集进行排序 1.Sort() --对数值直接进行排序 a.一维排序 b.二维排序 c.axis的认知 2.argsort() - ...

  6. 聊一聊C#基本类型

    C#基本类型 闲来无事,重新温习了下C#基本类型.以下讲的基本类型主要是包括基本的值类型类型和string.struct和class不包含其中. C#基本类型------值类型: bool,byte, ...

  7. 【Kata Daily 190906】Vasya - Clerk(职员)

    题目: The new "Avengers" movie has just been released! There are a lot of people at the cine ...

  8. 基于C++语言实现机动车违章处罚管理系统

    这篇文章主要介绍了基于C++语言实现机动车违章处罚管理系统的相关资料,需要的朋友可以参考下 关键代码如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

  9. html+js+highcharts绘制圆饼图表的简单实例

    下面我就为大家带来一篇html+js+highcharts绘制圆饼图表的简单实例.我觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随我过来看看吧 实例如下: 1 2 3 4 5 6 7 8 ...

  10. php支付宝签名验证类

    <?php /* * 黎明互联 * https://www.liminghulian.com/ */ class RSA { /** * RSA签名 * @param $data 待签名数据 * ...