基于GUI混沌系统图像加密解密

一、课题涉及的知识点

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。

  • 源代码

%打开图像部分

[filename,filepath] = uigetfile({'*.bmp;*.jpg;*.png;*.jpeg;*.tif','文件类型 (*.bmp,*.jpg,*.png,*.jpeg,*.tif)';'*.*', '所有文件(*.*)'},'Pick an image');

file = strcat(filepath,filename);

im = imread(file);

axes(handles.axes1);

imshow(im);

imwrite(im,'snap.bmp');

%调用摄像头部分

obj = videoinput('winvideo',1,'YUY2_1280x720')%1280x720 160x120 176x144 320x240 352x288 640x480

% vidRes = get(obj, 'VideoResolution',1);

% nBands = get(obj, 'NumberOfBands');

% preview(obj);%getsnapshot(obj);

vidRes = get(obj, 'VideoResolution');

nBands = get(obj, 'NumberOfBands');

hImage = image( zeros(vidRes(2), vidRes(1), nBands),'parent',handles.axes1);

preview(obj, hImage);

frame = getsnapshot(obj);

frame = ycbcr2rgb(frame);

imwrite(frame,'snap.bmp','bmp');

pic = imread('snap.bmp');

axes(handles.axes1);

imshow(pic);

title(date,'color','r');

function edit1_Callback(hObject, eventdata, handles)

% hObject    handle to edit1 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text

%        str2double(get(hObject,'String')) returns contents of edit1 as a double

% input = str2num(get(hObject,'String'));%这里get后面要注意

% if(isempty(input))

%     set(hObject,'String','0')

% end

guidata(hObject,handles)

% --- Executes during object creation, after setting all properties.

function edit1_CreateFcn(hObject, eventdata, handles)

% hObject    handle to edit1 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.

%       See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

% --- Executes on button press in pushbutton3.

function pushbutton3_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton3 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

a=imread('snap.bmp');

R=a(:,:,1);                           %取图像的R层像素

G=a(:,:,2);                           %取图像的G层像素

B=a(:,:,3);                           %取图像的B层像素

[M1,N1]=size(R);

[M2,N2]=size(G);

[M3,N3]=size(B);

h=0.01;    %混沌序列初始化

x=zeros(1,40001);x(1)= str2num(get(handles.edit1,'String'));

y=zeros(1,40001);y(1)=0;

z=zeros(1,40001);z(1)=0;

w=zeros(1,40001);w(1)=0;

v=zeros(1,40001);v(1)=0;

for n=1:40000         %产生混沌序列初始化,欧拉法

x(n+1)=x(n)+h*(3.5*(y(n)-x(n)-(-1.2+0.3*(w(n)*w(n)))*x(n)));

y(n+1)=y(n)+h*(2.1*y(n)-z(n)-0.2*(y(n)-x(n))-0.2*(1.2+7*abs(v(n)))*y(n));

z(n+1)=z(n)+h*(2.1*y(n)-z(n));

w(n+1)=w(n)+h*(x(n));

v(n+1)=v(n)+h*(y(n));

end

for n=1:40000  %对3个序列进行改进

x(n)=x(n)*1000000-round(x(n)*1000000);

y(n)=y(n)*1000000-round(y(n)*1000000);

z(n)=z(n)*1000000-round(z(n)*1000000);

w(n)=w(n)*1000000-round(w(n)*1000000);

v(n)=v(n)*1000000-round(v(n)*1000000);

end

% %对R通道进行加密

for j=1:N1  %用位异或法对像素进行置乱

aa=(uint8((M1*N1*(x(N1+j)+0.5))*ones(M1,1)));

g1(:,j)=bitxor(R(:,j),aa);

h1(:,j)=bitxor(g1(:,j),aa); %对像素置乱进行解密

end

for i=1:M1 %行置乱

t(1:N1)=y(1:N1);

[t1,index1]=sort(t(1:N1));

t1=flipud(t1);

g2(i,:)=g1(i,index1);

h2(i,index1)=g2(i,:);

end

% %对G通道进行加密

for j=1:N2  %用位异或法对像素进行置乱

bb=(uint8((M2*N2*(x(N2+j)+0.5))*ones(M2,1)));

j1(:,j)=bitxor(G(:,j),bb);

k1(:,j)=bitxor(j1(:,j),bb); %对像素置乱进行解密

end

for i=1:M2 %行置乱

t(1:N2)=x(1:N2);

[t2,index2]=sort(t(1:N2));

t2=flipud(t2);

j2(i,:)=j1(i,index2);

k2(i,index2)=j2(i,:);

end

  • 运行图例

基于GUI混沌系统图像加密解密相关推荐

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

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

  2. 基于Logistic混沌序列图像加密

    Logistic映射方程形式如下: X k + 1 = u X k ( 1 − X k ) , ( k = 1 , 2 , 3 - ) X_k+1 = uX_k ( 1- X_k),(k=1,2,3- ...

  3. 【图像加密】 Logistic混沌+Arnold置乱图像加密解密【含Matlab源码 1281期】

    ⛄一.混沌图像加密与解密简介 混沌系统图像加密解密理论部分参考链接: 基于混沌系统的图像加密算法设计与应用 ⛄二.Arnold置乱图像加密解密简介 0 前言 网络已经成为我们传递信息的主要平台, 为我 ...

  4. aes解密流程图_基于AES和混沌的图像加密方法与流程

    本发明涉及一种信息加密技术,特别是涉及一种图像加密方法. 背景技术: 在军事系统.电子政务.金融系统以及日常生活等领域,每天都会产生大量的图像.为保护这些图像信息内容不被窃取,图像加密技术引起了学术界 ...

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

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

  6. 【图像加密】基于小波变换结合混沌算法实现图像加密解密含Matlab源码

    ​1 简介 混沌系统被誉为一种天然的密码系统,因其具有对初值的极端敏感性,遍历性,确定性等特性,将混沌与现有加密算法有机结合的混沌加密技术被认为是很有前途的加密新算法.而混沌在二维相平面上表现出的不规 ...

  7. 计算机加密技术图片,基于Henon映射的图像加密技术

    内容介绍 原文档由会员 第二波打卡 发布 基于Henon映射的图像加密技术 1.95万字 53页 包括外文翻译,原创作品,通过查重系统 摘 要 针对关于Henon映射的图像加密算法,现如今已有很多关于 ...

  8. 利用Python+OpenCV对图像加密/解密

    原文地址:利用Python.OpenCV对图像加密解密 | QuantumCloud蕴藏一个有趣.不难且实用的理论知识https://myblog.quantumcloud.top/2021/05/1 ...

  9. MacOS下使用C语言基于openssl库进行RSA加密解密

    MacOS下使用C语言基于openssl库进行RSA加密解密 1 安装openssl并生成密钥 首先当然要安装openssl(这里记得看一下安装路径,应该是/usr/local/Cellar/open ...

最新文章

  1. 解决Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误
  2. Netty学习笔记(二) 实现服务端和客户端
  3. __int64 与long long 的区别
  4. LYNC文件传输功能开关
  5. 面试官 | JVM 为什么使用元空间替换了永久代?
  6. GET XXX net::ERR_CONNECTION_REFUSED
  7. 微服务 SpringBoot 通过jdbcTemplate配置Oracle数据源
  8. 闽南科技学院计算机分数线,闽南科技学院历年分数线 2021闽南科技学院录取分数线...
  9. SATA接口Raid、AHCI、IDE三种模式
  10. 耿建超英语语法---非谓语动词作主语
  11. 测回角值计算用计算机,土木工程测量6-计算题库及参考答案
  12. 化学与计算机技术,计算机技术与化学教学整合浅议
  13. JAVA扫码点餐(1)-项目介绍
  14. 使用计算机控制台方法,怎样进入电脑故障恢复控制台 进入电脑故障恢复控制台方法【图文】...
  15. perl and LWP 文档
  16. 高德地图两个多边形区域检测重叠解决方案
  17. Thymeleaf 变量输出与字符串操作
  18. LinkCloud:云计算服务 没有优惠活动就是最好的优惠
  19. 在JBuilder中生成EXE、可执行jar、带shell窗口的EXE
  20. python是一种跨平台开源免费的高级动态编程语言_Python是一种跨平台、开源、免费的高级动态编程语言。...

热门文章

  1. 【转载】上帝粒子证实存在宇宙末日来临?(图)
  2. 计算机专业国考录取比例,国考招录中,报考人数近18万,有3类专业成功几率高...
  3. 3个千兆WAN口和24个千兆交换LAN口,电信级高稳定性安全路由
  4. 99乘法口诀表用for循环
  5. not properly quoted string terminated_oracle quoted string not properly terminated
  6. 域名转向目录php代码,php域名301转向程序代码
  7. 数控技能大赛计算机程序设计员,第八届全国数控技能大赛决赛获奖名单
  8. 阿里云acp证书有用吗?阿里云acp证书考试内容有哪些?
  9. Python开发 CDN查询子域名查询
  10. Pytorch基于卷积神经网络的猫狗识别