用java实现图像的置乱加密,[转载]二维 Arnold 的图像置乱加密及解密——Matlab实现(1)...

基于Arnold变换的图像置乱Arnold变换是俄国数学家Vladimir I.

Arnold提出的一种变换,一幅N ×N的数字图像的二维Arnold

变换定义为:

a4c26d1e5885305701be709a3d33442f.png

注意:x,y是原图像的像素坐标,x',y'是变换后的像素坐标。保证|ad-bc|=1,如置换矩阵系数设为a=b=1,c=2,d=3,置换次数n=20,则他们被当作密钥key,用于解密。

Arnol变换的图像类型只能是N*N的图片。

1、灰度图像的二维 Arnold 的图像置乱加密及解密

(1)编写一个arnold.m文件与iarnold.m文件

function

[outImg]=arnold(inImg,key) % arnold置乱函数,inImg为输入图像,key为密钥。

%key=[Times,a,b,c,d];

[h,w]=size(inImg);

outImg=uint8(zeros(h,w));

tempImg=inImg; %定义中间变量

if iH

~= %判断密钥的合法性

error('The cover must be a square !');

return;

elseif

size(key,2) ~=5;

error('The

key must be 5 numbers !');

return;

elseif

(key(2)*key(5)-key(3)*key(4)) ~=1;

error('The Arnold Matrix is not valid !');

return;

end

for

i=1:key(1) %执行置乱的次数

for

u=1:h %将像素坐标置乱

for v=1:w

temp=tempImg(u,v); %获取坐标(u,v)处的像素值

ax=mod((key(2)*(u-1)+key(3)*(v-1)),w)+1;

ay=mod((key(4)*(u-1)+key(5)*(v-1)),w)+1;

outImg(ax,ay)=temp; %在新的坐标中赋上原来的像素值

end

end

tempImg=outImg;

end

outImg=tempImg; %输出图像

function

[outImg]=iarnold(inImg,key) %解密函数,inImg为加密图片,key为加密密钥

%key=[Times,a,b,c,d];

ik=round(inv([key(2),key(3);key(4),key(5)]));%必须进行取整(不能出现小数操作)或转换为Uint8类型。ik为arnold逆矩阵

ikey(2)=ik(1,1);ikey(3)=ik(1,2);ikey(4)=ik(2,1);ikey(5)=ik(2,2);

[h,w]=size(inImg);

outImg=uint8(zeros(h,w));

tempImg=inImg;

if h~=w

error('The

cover must be a square !');

return;

elseif size(key,2)~=5;

error('The

key must be 5 numbers !');

return;

elseif abs((key(2)*key(5)-key(3)*key(4)))~=1;

error('The

Arnold Matrix is not valid !');

return;

end

for i=1:key(1)

for

u=1:h

for v=1:w

temp=tempImg(u,v);

ax=mod((ikey(2)*(u-1)+ikey(3)*(v-1)),w)+1;

ay=mod((ikey(4)*(u-1)+ikey(5)*(v-1)),w)+1;

outImg(ax,ay)=temp;

end

end

tempImg=outImg;

end

outImg=tempImg;

(2)图像处理程序

加密置乱:

close all;

clear all;

a=imread('gflower.jpg'); %取要处理的图像

subplot(1,2,1);imshow(a);

title('original');

key=[5,5,2,7,3]; %设置密钥

aa=arnold(a,key); %加密运算

subplot(1,2,2);

imshow(aa); %显示处理效果title(' Permuted');

imwrite(aa,’aflower.bmp’); %保存结果(不能采用JPG等压缩格式保存,否则还原将失真)

a4c26d1e5885305701be709a3d33442f.png

解密还原:

b=imread(‘aflower.bmp’); %取加密图像

subplot(1,2,1);imshow(a);title('original');

key=[5,5,2,7,3]; %加密方提供的密钥

ib=iarnold(b,key); %进行解密运算

subplot(1,2,2);imshow(ib); %显示解密后的图像

title('

Decrypted');

imwrite(ib,’jiemi.bmp’); %保存图像

a4c26d1e5885305701be709a3d33442f.png

RGB图像加密及加密的复制性分析:

见下一篇《二维 Arnold 的图像置乱加密及解密——Matlab实现(2)》

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 二维Arnold置乱加密解密是一种基于Arnold映射的图像加密方法。该方法通过对图像进行置乱操作,使得图像中的像素位发生变化,从而达到加密的目的。在解密时,通过对置乱后的图像进行反向操作,即可还原出原始图像。 在Matlab实现二维Arnold置乱加密解密,可以使用Matlab自带的图像处理工具箱,结合Arnold映射算法实现。具体实现步骤如下: 1. 读取待加密图像,将其转换为灰度图像。 2. 对灰度图像进行Arnold置乱操作,得到置乱后的图像。 3. 对置乱后的图像进行Arnold置乱操作,得到解密后的图像。 4. 将解密后的图像保存为文件。 需要注意的是,在进行Arnold置乱操作时,需要选择合适的置乱参数,以保证加密效果和解密效果的可靠性。同时,在实现过程中,还需要考虑到图像的大小和像素值范围等因素,以确保程序的正确性和稳定性。 总之,二维Arnold置乱加密解密是一种简单有效的图像加密方法,可以在Matlab中进行实现。通过该方法,可以保护图像的安全性和隐私性,防止图像被非法获取和篡改。 ### 回答2: 二维Arnold置乱算法是一种基于混沌现象的加密算法,它主要应用于图像加密,以保护图像的隐私性和安全性。在图像加密过程中,二维Arnold置乱算法不仅能够混淆图像中的像素值,还能够扰动图像中的像素位,从而使得其具有较高的安全性和防抵押性。 在Matlab实现二维Arnold置乱算法时,首先需要对输入图像进行一些必要的预处理,如将图像转为灰度图像,将图像的大小调整为二的幂次方等。接着,利用Arnold变换实现图像置乱,其中Arnold变换是一种二维换矩阵,通过不断迭代,它可以实现图像中像素位的混淆。 在Arnold变换中,其参数可用于控制置乱强度,一般取一个较小的值,例如3或4。置乱后的图像可以进一步进行AES加密,以增强加密的安全性。加密过程完成后,可以将加密后的图像传输给接收方,接收方通过解密算法即可还原出原始的图像解密算法实现过程与加密算法过程类似,只是在Arnold变换中需要将置乱强度的参数取相反的数值,并将所得的图像进行解密运算。最终得到的图像与原始图像一致,即可根据需要进行后续处理和应用。 需要注意的是,二维Arnold置乱算法虽然具有较高的加密安全性和难度,但在实际应用中仍需考虑到算法的效率和速度。因此,在实现过程中需要结合具体应用需求和场景来进行调整和优化,以提高算法的效率和应用性能。 ### 回答3: 二维 Arnold图像置乱加密解密,是一种常见的图像加密算法。该算法基于 Arnold 换、混沌映射等数学原理,以图像的像素矩阵为基础,通过多次换和混沌映射来加密图像,使得加密后的图像在视觉上无法被识别和还原。本文将以 MATLAB 为例,介绍二维 Arnold图像置乱加密解密的具体实现方法。 一、算法流程 1.读取原始图像,获取像素信息。 2.使用 Arnold 换对像素进行置乱。 3.使用混沌映射加密置乱后的图像。 4.将加密后的图像保存至文件中。 5.对保存的加密图像进行解密。 6.使用逆混沌映射解密置乱图像。 7.使用逆 Arnold 换对图像进行还原。 8.将还原后的图像保存至文件中。 二、算法原理 1.Arnold Arnold 换是一种旋转映射,其基本思想是通过若干次旋转运算,将一个二维距阵“塞”到另一个二维矩阵中,从而实现图像置乱。具体地说,Arnold 换的矩阵运算公式为: f(x, y) = [(1 1) (1 2)] [x y] mod N 其中,(1 1) 和 (1 2) 表示矩阵的两个元素,x 和 y 分别表示被置乱图像像素的坐标,N 表示换次数。 2.混沌映射 混沌映射是一种非线性的动力系统,其基本特点是非周期性、无规则性和混性。通过调整混沌映射的参数,可以产生不同的混沌序列,从而实现图像加密的目的。 本文中,我们使用了一种常见的混沌映射算法,即 Logistic 映射。其运算公式为: x(n+1) = ax(n)(1-x(n)) 其中,x(n) 表示第 n 个时刻的值,a 为控制参数,通常取值为3.97。 三、实例展示 1.读取原始图像: 使用以下代码读取原始图像。 im = imread('test.jpg'); 2.Arnold 换: 使用以下代码对图像进行置乱。 N = 4; for i = 1:N for j = 1:N if mod(i+j, 2) == 0 && i <= N/2 % 顺时针旋转90度 im(i:i+N/2-1, j:j+N/2-1, :) = ... im(i:i+N/2-1, j:j+N/2-1, [2 1 3]); end if mod(i+j, 2) == 1 && i > N/2 % 逆时针旋转90度 im(i:i+N/2-1, j:j+N/2-1, :) = ... im(i:i+N/2-1, j:j+N/2-1, [2 1 3]); end end end 3.混沌映射加密: 使用以下代码对置乱后的图像进行加密。 a = 3.97; % 混沌映射参数 x = 0.1; % 初始值 N = size(im, 1); % 图像尺寸 for i = 1:N for j = 1:N x = a*x*(1-x); im(i, j, :) = bitxor(uint8(x*255), im(i, j, :)); end end 4.保存加密后的图像: 使用以下代码将加密后的图像保存至文件中。 imwrite(im, 'test_encrypted.bmp'); 5.解密加密后的图像: 使用以下代码读取加密后的图像。 im = imread('test_encrypted.bmp'); 6.逆混沌映射解密: 使用以下代码对加密后的图像进行解密。 a = 3.97; % 混沌映射参数 x = 0.1; % 初始值 N = size(im, 1); % 图像尺寸 for i = 1:N for j = 1:N x = a*x*(1-x); im(i, j, :) = bitxor(uint8(x*255), im(i, j, :)); end end 7.逆 Arnold 换还原图像: 使用以下代码对解密后的图像进行还原。 N = 4; for i = N:-1:1 for j = N:-1:1 if mod(i+j, 2) == 0 && i <= N/2 % 逆时针旋转90度 im(i:i+N/2-1, j:j+N/2-1, :) = ... im(i:i+N/2-1, j:j+N/2-1, [2 1 3]); end if mod(i+j, 2) == 1 && i > N/2 % 顺时针旋转90度 im(i:i+N/2-1, j:j+N/2-1, :) = ... im(i:i+N/2-1, j:j+N/2-1, [2 1 3]); end end end 8.保存还原后的图像: 使用以下代码将还原后的图像保存至文件中。 imwrite(im, 'test_decrypted.jpg'); 四、总结 本文简要介绍了二维 Arnold图像置乱加密解密实现方法,其中涉及到的数学知识和 MATLAB 编程技巧,可能对初学者来说有些困难。但是,只要认真分析算法流程和程序实现,按照步骤逐一实现,就能够成功完成图像加密解密的操作。同时,该算法的可靠性和安全性还需要进行更加深入的研究和探索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值