基于Matlab的数字图像加密解密技术研究Contents随机打乱各层的行或列2像素点随机打乱3像素点RGB值的缩放4概述1总结5随着社会科学的进步,多媒体技术、信息存储技术的飞速发展,以及网络普及率的提升,越来越多的数字图像得以在网络上传输,并逐步成为人们获取信息的主要途径,因此对图像的安全保密有更高的要求。例如,图像数据所有者在Internet上传输他所拥有的图像时,为了保护自身的利益,就需要对发送的图像通过可靠的加密技术进行处理;在远程医疗系统中,病人的照片等图像数据必须在加密之后才能在网上传输。于是图像的加密、解密技术就应运而生了。摘要1数字图像加密解密技术是随着信息安全与保密被重视而发展起来的。良好的数字图像加密算法一方面可以达到使非法使用者无法破译图像内容的目的。Digitalimageencryption,decryptiontechnologyiswiththedevelopmentofinformationsecurityandconfidentialityareconsidered.Gooddigitalimageencryptionalgorithmbasedontheonehand,canachievethepurposeofmakingillegalusersunabletodecipherimagecontent.2Matlab里的imread函数可用于读取图片文件中的数据。读进去的数据为一个三层的矩阵,矩阵的行或列表示图像每一个像素点的位置。矩阵的第一层、第二层、第三层分别代表红、绿、蓝三种像素(RGB色域)。对此,可设计以下几种加密方法:①随机打乱各层的行或列。②随机打乱像素点③像素点RGB值的缩放。准备知识准备知识2imread:用于读取图片文件中的数据,对于RGB图像返回一个m*n*3的矩阵。size:该函数返回的是一个行向量,该行向量的第一、二、三个元素分别是矩阵的行数、列数和层数。randsample:该函数调用格式为randsample(n,k),其可产生一个元素数量为k,从1到n的列向量。reshape:该函数可将矩阵重新排列,调用方式为reshape(A,m,n,q)即将矩阵A重置为m*n*q的矩阵。find:可找出矩阵中某一元素的位置准备知识2A(b):可将矩阵A中的元素按照向量b的顺序重新排列用imread函数将图像读入矩阵RGB中,RGB是一个m行n列3层的矩阵。用randsample产生一个与图像矩阵RGB的行数m相等的整数随机数列并返回到r中。这样就可以将原图像矩阵的行随机打乱,将打乱后的矩阵返回至RGBS中。用find函数找出向量r内从1到m的元素的位置并返回到向量f。至此就可以将打乱的图像还原。原理:clearRGB=imread('lenna.jpg');s=size(RGB);r=randsample(s(1),s(1));RGBS=RGB(r,:,:);t=1;j=1;f=1:r;whilet=length(r)f(j)=find(r==t);t=t+1;j=j+1;endf;RGBE=RGBS(f,:,:);subplot(1,2,1);imshow(RGBS);title('加密后','fontsize',20);subplot(1,2,2);imshow(RGBE);title('解密后','fontsize',20);程序一加密后解密后clearRGB=imread('321.jpg');s=size(RGB);i=randsample(s(2),s(2));RGBS=RGB(:,i,:);t=1;j=1;f=1:i;whilet=length(i)f(j)=find(i==t);t=t+1;j=j+1;endf;RGBE=RGBS(:,f,:);subplot(1,2,1);imshow(RGBS);title('加密后','fontsize',20);subplot(1,2,2);imshow(RGBE);title('解密后','fontsize',20);程序二加密后解密后clearRGB=imread('321.jpg');s=size(RGB);i=randsample(s(1),s(1));RGBS=RGB(i,:,:);t=1;j=1;f=1:i;whilet=length(i)f(j)=find(i==t);t=t+1;j=j+1;endi1=randsample(s(2),s(2));RGBS1=RGBS(:,i1,:);t1=1;j1=1;f1=1:i1;whilet1=length(i1)f1(j1)=find(i1==t1);t1=t1+1;j1=j1+1;endRGBE1=RGBS1(:,f1,:);RGBE=RGBE1(f,:,:);subplot(1,2,1);imshow(RGBS1);title('加密后','fontsize',20);subplot(1,2,2);imshow(RGBE);title('解密后','fontsize',20);程序三加密后解密后打乱矩阵行或列的方法运算步骤少、运算速度快,可对较大图像文件进行加密。优点:对于一些特殊的图像无法进行加密。缺点:加密后解密后用imread函数将图像读入矩阵RGB中,RGB是一个m行n列3层的矩阵。randsample可产生随机向量,用此函数产生一个值为从1到m*n*3的行向量并返回到r中。用reshape函数将RGBS中的所有元素重置为新的矩阵并返回到RGBSS中。用find函数找出向量r内从1到m的元素的位置并返回到向量f。至此就可以将打乱的图像还原。原理:由于真彩图像的矩阵元素非常多,这种加密算法运算速度较慢。优点:缺点:像素点随机打乱算法即将图像文件的每一个像素点随机打乱。这种算法的加密效果非常好,加密用的随机数列更提高了这种算法的加密性。程序四clearRGB=imread('lenna.jpg');s=size(RGB);n=s(1)*s(2)*s(3);r=randsample(n,n);RGBS=RGB(r);RGBSS=reshape(RGBS,s(1),s(2),s(3));t=1;j=1;f=1:n;whilet=length(r)f(j)=find(r==t);t=t+1;j=j+1;endRGBE=RGBS(f);RGBEE=reshape(RGBE,s(1),s(2),s(3));subplot(1,2,1);imshow(RGBSS);title('加密后','fontsize',20);subplot(1,2,2);imshow(RGBEE);title('解密后','fontsize',20);加密后解密后每个像素都有各自的颜色值,其颜色值按一定倍数缩放,将其原数值进行覆盖,便产生了与原图像不同的图像,起到了加密的作用。这种加密方法加密效果会随倍数的增加其效果会更好,但由于过于简单,易被解密。用imread函数将图像读入矩阵RGB中,假设RGB是一个m行n列3层的矩阵。Rand函数产生一个m行n列3层的由随机数组成的矩阵,并返回到r中,再返回时可以数乘一个数改变其缩放倍数。用矩阵的点运算,通过点乘、点除,可得到加密解密图像。程序五clearRGB=imread('lenna.jpg');s=size(RGB);r=rand(s(1),s(2),s(3))*50;RGBD=im2double(RGB);RGBS=RGBD.*r;RGBE=RGBS./r;subplot(1,2,1);imshow(RGBS);title('加密后','fontsize',20);subplot(1,2,2);imshow(RGBE);title('解密后','fontsize',20);加密后加密后上述讨论了三种对数字图像加密解密的方法及原理,以及其matlab实现方法和加密效果。这三种方法只适用于加密后立刻解密,要广泛应用应选择一个具体的固定的算法进行加密解密。从以上分析可知,不同的加密方法适用于不同的场合,而加密算法的不同也使得图像加密效果和运算速度有所不同。图像加密解密技术随着信息安全的要求而越来越被重视,所以完善和改进图像加密算法将是今后要解决的一个重要问题。谢谢观赏