Logistic映射

Logistic映射是一种可产生的非线性系统,模型表示如下:
xn+1=μxn(1−xn)x_{n+1}=\mu x_n(1-x_n) xn+1​=μxn​(1−xn​)
式中:0<μ≤4;0<x<1;n∈N;xn∈[0,1]0<\mu\leq4;0<x<1;n∈N;x_n∈[0,1]0<μ≤4;0<x<1;n∈N;xn​∈[0,1];μ\muμ是分岔参数,当3.5699456...<μ≤4当3.5699456...<\mu\leq4当3.5699456...<μ≤4时,映射进入混沌(chaos)区域。

Logistic映射分岔图像如下图所示。

注:

Logistic模型分叉图生成过程及代码见文章尾部参考链接1

混沌方法的数字图像加密实现

摘要

目前混沌系统与加密技术相结合是现如今最热门的一个课题之一,虽然有大量的加密算法面世,但是这些加密算法并不成熟,仍然需要进一步的研究。而混沌系统具有许多重要的性质,如对初始条件和系统参数的敏感依赖性,使得基于混沌系统的图像加密得到了广泛的研究与应用。

虫口模型-Logistic混沌映射

传统的混沌映射加密可分为置换和扩散两个阶段,像素置乱变换与灰度值替换都由混沌系统产生的混沌序列所控制,扩散过程如下:

  • 步骤1:利用混沌序列获取密钥流。
  • 步骤2:加密图像矩阵的像素值。
  • 步骤3:重复步骤2,直到达到密文图像。

算法

设图像(i,j)处的灰度值为I(i,j),满足 1≤i≤M、1≤j≤N1\leq i \leq M、1\leq j \leq N1≤i≤M、1≤j≤N, I′(i,j)I'(i,j)I′(i,j)表示替换后 I(i,j)I(i,j)I(i,j)在(i,j)出的灰度值。

加密公式
I′(i,j)=(((r1(i,j)+r2(i,j))⊕r3(i,j))+I(i,j))mod256I'(i,j)=(((r_1(i,j)+r_2(i,j))\oplus r_3(i,j))+I(i,j))mod256 I′(i,j)=(((r1​(i,j)+r2​(i,j))⊕r3​(i,j))+I(i,j))mod256
其中:mod表示求模运算;⊕\oplus⊕表示按位异或运算。r1,r2,r3表示的是混沌序列值与255的乘积(采用多混沌序列产生的密钥空间大于单一的混沌序列所产生的密钥空间),替换变换的密钥由r1,r2,r3对应的混沌系统提供,可以进行多次变换寻求更好加密效果。

解密公式:
I(i,j)=(I′(i,j)−((r1(i,j)+r2(i,j))⊕r3(i,j)))mod256I(i,j)=(I'(i,j)-((r_1(i,j)+r_2(i,j))\oplus r_3(i,j))) mod 256 I(i,j)=(I′(i,j)−((r1​(i,j)+r2​(i,j))⊕r3​(i,j)))mod256
解密是加密的逆,可以容易得到验证。

实验环境

  • 语言:python3.8
  • 编辑器:Sublime Text 3
  • python库:numpy、matplotlib、cv2
  • 实验图像下载

实验代码(python3.8)

import cv2
import numpy as np
import matplotlib.pyplot as plt'''
加密函数
img_encrypt:原始图像(二维ndarray)
key:密钥列表,大小为7(1、2、3为混沌系统初始条件;4、5、6为分岔参数u,7为重复加密次数)
return:返回加密后的图像
'''
def encrypt(img,key):#图像的宽高[w,h]=img.shape#混沌系统初始条件x1=key[0]x2=key[1]x3=key[2]#分岔参数uu1=key[3]u2=key[4]u3=key[5]#加密次数n=key[6]#一个临时数组用于返回加密后的图像,可以不影响原始图像img_tmp=np.zeros((w,h))#对原始图像的每个像素都处理n次for k in range(n):for i in range(w):for j in range(h):#计算混沌序列值x1=u1*x1*(1-x1)x2=u2*x2*(1-x2)x3=u3*x3*(1-x3)##混沌值位于[0,1]区间内,所以可以看做是一个系数,乘以最大灰度值并转成整数用于异或运算即可r1=int(x1*255)r2=int(x2*255)r3=int(x3*255)img_tmp[i][j]=(((r1+r2)^r3)+img[i][j])%256#下一轮加密重新初始化混沌系统x1=key[0]x2=key[1]x3=key[3]return img_tmp'''
解密函数
img:加密后图像(二维ndarray)
key:密钥列表,大小为7(1、2、3为混沌系统初始条件;4、5、6为分岔参数u,7为重复加密次数)
return:返回解密后的图像
'''
def decrypt(img,key):#图像的宽高[w,h]=img.shape#混沌系统初始条件x1=key[0]x2=key[1]x3=key[2]#分岔参数uu1=key[3]u2=key[4]u3=key[5]#加密次数n=key[6]#一个临时数组用于返回加密后的图像,可以不影响传入的加密图像img_tmp=np.zeros((w,h))#对原始图像的每个像素都处理n次for k in range(n):for i in range(w):for j in range(h):x1=u1*x1*(1-x1)x2=u2*x2*(1-x2)x3=u3*x3*(1-x3)r1=int(x1*255)r2=int(x2*255)r3=int(x3*255)img_tmp[i][j]=(img[i][j]-((r1+r2)^r3))%256# img[i][j]=(img[i][j]-((r1[i*w+j]+r2[i*w+j])^r3[i*w+j]))%256#下一轮加密重新初始化混沌系统x1=key[0]x2=key[1]x3=key[3]return img_tmpdef main():#原始图像路径path='./lena.jpg'#加密密钥参数列表key=[0.343,0.432,0.63,3.769,3.82,3.85,1]#读取原始图像img=cv2.imread(path)#img.shape=>(512,512,3),宽、高、通道数量#图像灰度化img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)#混沌加密原始图像img_encrypt=encrypt(img_gray,key)#错误密钥解密图像wrong_key=[0.342,0.432,0.61,3.769,3.82,3.85,1]wrong_decrypt=decrypt(img_encrypt,wrong_key)#正确密钥解密图像img_decrypt=decrypt(img_encrypt,key)#结果展示plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文乱码#子图1,原始图像plt.subplot(221)#plt默认使用三通道显示图像,所以需要制定cmap参数为gray#imshow()对图像进行处理,画出图像,show()进行图像显示plt.imshow(img_gray,cmap='gray')plt.title('原始图像(灰度化)')#不显示坐标轴plt.axis('off')#子图2,加密后图像plt.subplot(222)plt.imshow(img_encrypt,cmap='gray')plt.title('加密图像(密钥{}'.format(key))plt.axis('off')#子图3,错误密钥解密结果plt.subplot(223)plt.imshow(wrong_decrypt,cmap='gray')plt.title('解密图像(密钥{})'.format(wrong_key))plt.axis('off')#子图4,正确密钥解密结果plt.subplot(224)plt.imshow(img_decrypt,cmap='gray')plt.title('解密图像(密钥{})'.format(key))plt.axis('off')#设置子图默认的间距# plt.tight_layout()#保存图像# cv2.imwrite('./lean_original.jpg',img)# cv2.imwrite('./lean_gray.jpg',img_gray)# cv2.imwrite('./lean_encrypt.jpg',img_encrypt)# cv2.imwrite('./lean_gray.jpg',wrong_decrypt)# cv2.imwrite('./lean_decrypt.jpg',img_decrypt)#显示图像plt.show()if __name__ == '__main__':main()

实验结果

从图中可以看出,哪怕错误密钥与正确密钥只是微小的差别,也难以从解密结果中看出一丝原始图像的信息。采用混沌系统来加密图像取得了较好的效果。

参考:

  • 【Logistic映射】

  • 【python读取图像并显示灰度图】

  • 【如何将Numpy数组保存为图像】

Logistic映射在图像加密中的应用相关推荐

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

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

  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. 混沌序列 java,基于Logistic映射混沌加密算法的研究_韩凤英

    第7卷第1期长沙航空职业技术学院学报 Vo1.7No .1 2007年3月 CHANGS HA AERO NAUT I CAL VOCATI ONAL AND TECHN I CAL COLLEGE ...

  4. 【图像加密】图像处理之Logistic混沌序列加密

    前言:本文原发表在新浪博客http://blog.sina.com.cn/s/blog_b27f71160101h5bm.html,现新浪博客将其搬家至CSDN,原新浪博客停止更新. ①申请搬家后,迟 ...

  5. C#实现基于Logistic映射混沌加密算法(可加密静态图片和动态图片)

    这是本菜鸡在<信息隐藏>中实现的图像加密,选用的是logistics混沌加密算法,希望对你的课设或项目有所帮助 文章目录 基于Logistic映射混沌加密算法 逻辑斯蒂(Logistic) ...

  6. 【图像加密】基于matlab GUI Logistic+Tent+Kent+Henon图像加密与解密【含Matlab源码 1745期】

    ⛄一.混沌系统简介 0 引言 随着通讯技术的飞速发展, 越来越多的领域需要传送数字图像信号, 因此信息的传送安全问题显得越来越重要.通常应用于数字图像通信的两种保护技术为:数字水印技术和图像加密技术. ...

  7. 【图像加密】Logistic+Tent+Kent+Henon图像加密与解密【含GUI Matlab源码 1745期】

    ⛄一.混沌系统简介 0 引言 随着通讯技术的飞速发展, 越来越多的领域需要传送数字图像信号, 因此信息的传送安全问题显得越来越重要.通常应用于数字图像通信的两种保护技术为:数字水印技术和图像加密技术. ...

  8. 《混沌映射与比特重组的图像加密》(平萍等)一文的算法改进和展望

    索引 传送门 算法改进 算法展望 (初步) 传送门 文献原文可前往其收录处<混沌映射与比特重组的图像加密>. 文献的算法流程 (包括算法勘误, 算法整理) 可以参见博文<<混沌 ...

  9. 【图像加密】基于Logistic混沌图像加密与解密Matlab代码

    1 简介 当今时代,科学技术发展迅猛,网络成为人们获取成为人们获取多媒体数字信息的主要渠道,数字图像作为日常交流的主要传输媒介,更是承担着信息传递的重任.保证信息在传播过程中的安全性和完整性便成了目前 ...

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

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

最新文章

  1. 分布式系统 一致性模型的介绍 以及 zookeeper的 “线性一致性“ 讨论
  2. 【炫酷秀】仅用4行代码再现《黑客帝国》数字雨,可立即在终端实现!
  3. 通过Playbook部署LAMP(5)
  4. 数据切分 垂直切分、垂直拆分与水平拆分的优缺点
  5. CG-CTF-Web-AAencode
  6. 1小时搞懂设计模式之原型模式
  7. bcd转ascii码 流程图_4-20mA转RS485,MODBUS数据采集模块
  8. 为什么大多数私人企业无法做大做强?
  9. 洛谷——P1657 选书
  10. fir.im Weekly - 工欲善其事,必先利其器
  11. HDU2566 统计硬币【暴力】
  12. ubuntu 下 Graphviz 的安装及神经网络的绘图
  13. 排列组合 “n个球放入m个盒子“里,再来一遍
  14. 1.2 Linux的网络配置和连接工具
  15. seajs的使用--主要了解模块化
  16. 谷歌浏览器官网默认只能下载在线安装包(只有几兆大小)若想下载完整的离线安装包,可以用以下官方链接
  17. 计算机专业个人职业规划范文200字,计算机专业的职业生涯规划范文
  18. get方法和post方法的区别和联系
  19. DELL戴尔开启/关闭触摸板方法
  20. 有趣!让你的桌面独一无二——iWall for Mac2.1.1破解版可以交互的动态桌面壁纸!

热门文章

  1. 机器语言入门 w3c,编程语言
  2. OptiX OSN3500
  3. 《生物信息学》阅读笔记 (一):生物信息学的概念及发展历史
  4. hive-sql中平方和开根号函数
  5. 智慧城市数字政府建设【转】
  6. 微信小程序商店:极乐小程序商店推荐之601~700
  7. Git和SVN区别和命令
  8. 计算机英语简历模板,计算机专业的英文简历模板
  9. Java 实现数据库导出Excle
  10. Vue开发者工具 安装