阿诺德图像加密c语言,基于Arnold置乱的数字图像加密算法(二)

前文我们介绍了基于Arnold置乱的数字图像加密算法的两种图像置乱变换,今天我们介绍的是另外三种图像置乱变换:基于骑士巡游的图像置乱变换、基于Arnold变换的数字图像置乱和基于仿射变换的置乱变换。

一、基于骑士巡游的图像置乱变换

所谓骑士巡游,就如同象棋一样,给出一块具有n²个格子的n×n棋盘,一位骑士(knight)按国际象棋规则移动,放在初始坐标为(x0,y0)的格子里,骑士巡游问题(Knight-tour Problem)就是要求寻找一种方案使之过每个格子一次,且仅一次。该问题可以较自然地推广到n×m棋盘。一个9×9棋盘的骑士巡游路线如下面的矩阵T所示,称其为巡游矩阵,其中1表示骑士巡游的起点,t(i, j)的值表示其实第t(i, j)步巡游到i行j列。

20722-1.jpg

骑士巡游变换:对于图像A={a(i, j)}nxm,用巡游矩阵T={t(i, j)}nxm作置乱变换,得到图像B。其变换方法如下:将A与T按行列作一一对应,将A中与T中位置1对应(下简称对应位置)的像素灰度值(或R、G、B分量值)移到对应位置2,将对应位置2的像素灰度值移到对应位置3,......以此类推,最后将对应nxm位置的像素灰度值移动对应位置1,就得到了按T置乱后的图像B。这种按骑士巡游路径进行置乱的变换,简称为骑士巡游变换。

按骑士巡游变换对图像作置乱,不仅可以隐藏图像细节,而且可以使用图像总的形象保持不变,用骑士巡游变换来作图像的隐藏,其保密度是比较高的。密钥个数大于Hilber曲线、Peano方法、E-曲线、幻方置乱变换的密钥个数。通过骑士巡游起点和终点的选取、巡游方向的变化以及挖洞的位置和数量的确定来构成不同的密钥,它既适合单密钥体制,所以其保密度较高。

骑士巡游交换具有以下优点:

(1)适用于高和宽不同的图像,而幻方变化仅适用于高和宽相同的图像;

(2)置乱方法灵活,可通过编程来控制巡游的起点、终点以及巡游的方向,还可控制一些点不巡游(挖洞),从而得到不同的置乱方法;

(3)不仅能隐藏图像的细节,而且特别能隐藏图像中的文字信息,也可应用于其他计算机文件的加密。骑士巡游变换同样具有周期性,其变换周期就是n²。

二、基于Arnold变换的数字图像置乱

20722-2-1.jpg

这是对一个一般的二维可逆保面积映射加了取正整数的限制,这种变换具有拉伸和折叠的性质,经变换后原来相邻的亮点(i, j)和(i, j+1)经几次迭代后就不再相邻,这样图像经迭代若干次后就变得不可辨认,从而达到加密的效果。当|A|=+1时,变换后的图像保持面积不变。由于这是一种双射而且图像是一个有限点集,所以反复变换必然能够恢复到原来的位置,即变换具有周期性,从而对加密图像只需继续变换相应的次数就能对图像解密。若P满足一定条件,此变换具有周期性,其周期与图像大小和内容没有直接联系。Arnold变换实际上是一种点的位置移动,且这种变换是一一对应的。Arnold变换仅有4个参数,用户数据加密尚嫌太少。

20722-3-1.jpg

所以变换的周期T是使下式成立的最小自然数m:Am(mod N)=E,其中E为单位矩阵。这样就很容易通过编程求出变换的周期。

A作为加密矩阵应具有以下特点:映射是单的,满的。即:保持图像面积的不变性。

加密因子a,b,c,d都是整数,因为图像中作为离散的点都是取整数的。

变换具有周期性或可逆,以保证加密后可以解密。

三、基于仿射变换的置乱变换

仿射变换是几何中感到一种常见变换,它可以分解成:运动变换、斜对称变换、相似变换、压缩(拉伸)变换、正交变换、剪移等变换的组合,其矩阵形式:

20722-4.jpg

从数据加密角度考虑,仿射变换的参数有6个,比Arnold变换增加了两个,从密钥角度出发,增加了大量的密钥。

虽然对于平面仿射变换由三对对应点代入后就可完全确定,但由于目的是要它作图像的置乱。因此对仿射变换还有特殊的要求,即:要寻找恰当的系统数使得变换是区域{1,2...N}到自身的单映射和满映射。我们可以从仿射变换的特点出发,从而可求得满足要求的一系列解。求得的系数可作为图像置乱加密的密钥。

定义1:上式是仿射变换的必要条件是:ad-bc=+1.

证明:根据仿射变换的定义,变换前后的图像面积保持不变,即图像所在区域的几何面积不变,因此ad-bc=+1。

作为数字图像加密的仿射变换是不容易求出的,需要很强的技巧。下面是三种交换:

20722-5.jpg

和Arnold变换相类似,这是一种二维可逆保面积映射加了一定的限制条件,这种变换具有拉伸和折叠的性质,经变换后原来相邻的两点(i, j)和(i, j+1)经几次迭代后就不再相邻,这样副图像经迭代若干次后就变得不可辨认,从而达到加密的效果。由于这是一种双射而且图像是一个有限点集,所以反复变换必然能够恢复到原来的位置,即变换具有周期性,从而对加密图像只需继续变换相应的次数就能对图像解密。根据仿射变换的定义,容易得到下面的性质:

性质1:仿射变换的积仍是仿射变换。

性质2:仿射变换的和不是仿射变换。

性质3:仿射变换的逆一定存在,且仍是仿射变换。

仿射变换用于图像置乱有较好的效果。在经过一定的迭代置乱变换后,可将图像的各种灰度值均匀的分布到图像区域中,从而能较好的隐藏原图像的信息。另外由于这种仿射变换是双射且图像是由有限个点组成的,所以经过一定的迭代次数后能够得到原图像。

20722-6.jpg

也可以利用仿射变换的逆变换对图像进行加密,这就增加了一种新的加密算法,而且它和仿射变换具有相似的性质。

仿射变换避免了取模运算,从而运算速度快,它的逆交换也具有简洁的解析表达式,使得解密过程无需进行周期次数的迭代。该新变换只需进行十几次的迭代过程就可以使图像完全置乱,因此它即可作为图像加密的变换方法,另一方面,从信息隐藏的角度考虑,图像置乱变换作为信息隐藏的预处理,如置乱后再进行隐藏,Arnold变换在进行迭代置乱时,有较强的纹理特征,而仿射变换使得图像置乱后,其中灰度值均匀的分布在图像所在的区域,减少了置乱图像的纹理特征,从而提供了信息的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python学习(十七) 扩展python

c, c, java比python快几个数量级。 17.1 考虑哪个更重要 开发速度还是运行速度更重要。 17.2 非常简单的途径:Jython和IronPython Jython可以直接访问JAVA标准库。 IronPython中可以直接访问C#标准库。 17.3 编写C语言扩展 扩展Python通常就是扩展CPython&#xff0…

织梦DEDECMS网站留言板提交时验证码错误返回空白页的解决办法

织梦DEDECMS模板网站留言板提交时验证码错误返回空白页的解决办法: 默认情况下,如果我们使用DEDE模板中的默认留言板时,如果留言信息不正确或者输入内容为空时,dedecms系统就会返回一个空白页。 这样的方式很不利于用户体验&#…

android 车辆轨迹,Android自定义view实现车载可调整轨迹线

本文实例为大家分享了Android自定义view完成车载可调整轨迹线的具体代码,供大家参考,具体内容如下同事做的view,拿过来做个记录。/****/package com.text.myviewdemo.view;import org.apache.http.conn.routing.RouteInfo.LayerType;import a…

导航栏制作

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><style>*{margin: 0px; /*盒子外边距*/padding: 0px; /*盒子内边距*/}.NavigatorView {width: 100%;height: 50px;background-color: WhiteSmok…

我的织梦数据库学习

1、织梦中数据库有前缀&#xff0c;在程序会写成#__archives 这样的形式。其中自己要把#__前缀换成自己设置的表前缀&#xff0c;下划线也要注意换掉。

android使用menu需要重写的方法,Android – 正确使用invalidateOptionsMenu()

我一直在关注invalidateOptionsMenu() &#xff0c;我知道它的作用。 但是我想不出这个方法可能有用的任何现实生活中的例子。我的意思是&#xff0c;例如&#xff0c;假设我们想要为ActionBar添加一个新的MenuItem &#xff0c;我们可以从onCreateOptionsMenu(Menu menu)获取菜…

织梦留言板guestbook.htm加入头部导航

织梦仿站的时候如果有留言板&#xff0c;通常都是不像织梦这样的留言板独立的页面&#xff1b;都是带头部导航的。那么如何在guestbook.htm加入头部导航&#xff1b;如果直接加入head.htm的话。标签在这里是无法调用的&#xff1b;我们必须使用函数来解决这个问题&#xff1b; …

8.2 css3 新增标签 盒子模型 长度单位 颜色 渐变 径像渐变

# CSS3 盒子模型* box-sizing 值 content-box 默认值 包括所有的值 / border-box 只算边框的长与宽* resize&#xff08;调节框的大小&#xff09; * 值 none不允许 / horizontal调节宽度 / vertical调节高度 / both都可以* outline轮廓边框 o…

android keyboardview去掉点击效果,KeyboardView is deprecated in android

问题KeyboardView has been deprecated official by android team in API level 29 and i didnt able to find the alternative way for this. Please let me know if there any alternative?回答1:From the docs here :This class was deprecated in API level 29. This clas…

浅析dedecms织梦网站留言板提交时验证码错误的解决办法

默认情况下&#xff0c;如果我们使用DEDE模板中的默认留言板时&#xff0c;如果留言信息不正确或者输入内容为空时&#xff0c;dedecms系统就会返回一个空 白页。这样的方式很不利于用户体验&#xff0c;解决这个问题实际上非常简单。 找到dedecms留言板文件/plus/guestbook.ph…

Tomcat服务器的安装及配置

学习目标&#xff1a; 了解Tomcat服务器的主要作用掌握Tomcat服务器的安装与配置掌握Tomcat安装目录下主要文件夹的作用jsp的执行流程1.Web的工作原理流程图&#xff1a;从图中可以看出Tomcat服务器的主要作用就是接受客户端的请求和响应。 2.jsp执行流程 1&#xff09;客户端发…

android 后台执行js,android - 当应用程序在后台运行时,Android WebView消耗大量电能...

我的Android应用程序中有一个WebView&#xff0c;并且此WebView运行的网站上带有相当多的Javascript。当我的应用程序在后台运行时&#xff0c;用户报告了高功耗&#xff0c;我希望这是由于此javascript。但是&#xff0c;我不想完全卸载或删除WebView&#xff0c;因为这会影响…

织梦DEDE网站后台如何上传附件

首先登录织梦网站后台&#xff1a; 分别点击 核心 — 附件管理 — 文件式管理 里面有织梦自带的几个文件夹&#xff0c;包括图片&#xff0c;视频&#xff0c;软件等文件夹。我们来新建一个file文件夹 点击 新建目录 建立file文件夹。 默认应该是跳转进file文件夹了&#xff…

Hands-On Modeler (建模人员参与程序开发)

如果编写代码的人员认为自己没必要对模型负责,或者不知道让模型为应用程序服务,那么这个模型就和程序没有任何关联.如果开发人员没有意识到改变代码就意味着改变模型,那么他们对程序的重构不但不会增强模型的作用,反而会削弱他的效果, 同样,如果建模人员不参与到程序的实现过程…

泰拉瑞亚mod鸿蒙方舟,三款高评分的沙盒生存类手游,经典之作泰拉瑞亚你有玩过吗?...

沙盒类游戏由一个或多个地图区域构成&#xff0c;往往包含多种游戏要素&#xff0c;包括角色扮演&#xff0c;动作、射击、驾驶等等。能够改变或影响甚至创造世界是沙盒游戏的特点。自由度高也成为了沙盒游戏的一个标配&#xff0c;所以今天小皮就给大家推荐几款超赞的沙盒生存…

织梦返回上一页面

ShowMsg("成功退出登录&#xff01;","javascript:history.back(-1)",0,2000); ShowMsg("成功退出登录&#xff01;",$_SERVER[HTTP_REFERER],0,2000); $_SERVER[HTTP_REFERER] 是上一页的url