过冷水诚挚邀请你加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载,群号:927550334
21世纪是人才的世界,也是信息大爆炸的时代,棱镜门事件就显示了信息安全的重要性,信息加密转换是一件很常见的事,我们现在语音or视频当然不会感受到电报年代的 三长一短==晚上出来吃饭 三段三长==偷袭珍珠港。程序员会经常接触到信息转换,过冷水也了解一点,信息转换和信息加密是一个意思。有点像str2num 和num2str两个函数。
m=56.8133;n=19.2481; str = ['min(' num2str(m) ',' num2str(double(n)) ')'] Str=str2num(str) str = 'min(56.8133,19.2481)' Str = 19.2481 19.2481='min(56.8133,19.2481)'
在读取文本数据和储存数据的时候也会出现
row1='《一代人》';row2='黑夜给了我黑色的眼睛';row3='我却用它寻找光明'; FileID=fopen('test.docx','w','b'); fwrite(FileID,row1, 'char'); fprintf(FileID,'\n'); fwrite(FileID,row2, 'char'); fprintf(FileID,'\n'); fwrite(FileID,row3, 'char'); fclose(FileID); %读取数据 FileID=fopen('test.docx','r','b'); A=fread(FileID,5000,'char') B=char(A') A = 12298 19968 20195 20154 12299 10 40657 22812 32473 20102 25105 40657 33394 30340 30524 30555 10 25105 21364 29992 23427 23547 25214 20809 26126 B = '《一代人》 黑夜给了我黑色的眼睛 我却用它寻找光明' B=A
举了两个案例让大家了解日常接触到的了信息转换。本期过冷水要讲的图像加密就是类似处理。
%加密方法,混沌序列 A=imread('12.jpg'); imshow(A); title('原图') [M,N]=size(A);%原始图像A的尺寸一MxN u1=4;u2=4;x1(1)=0.2;x2(1)=0.7; sumA=sum(sum(A)); k=mod(sumA,256)*1.0/255; x1(1)=(x1(1) 0.7804)/2; x2(1)=(x2(1) 0.7804)/2; y1(1)=(1/3.1415926)*asin(sqrt(x1(1))); y2(1)=(1/3.1415926)*asin(sqrt(x2(1))); for i=1:1:M*N-1 %产生2个Logistic混沌序列 x1(i 1)=u1*x1(i)*(1-x1(i)); x2(i 1)=u2*x2(i)*(1-x2(i)); end for i=1:1:M*N %改造2个Logistic,得到两个y序列 y1(i)=(1/3.1415926)*asin(sqrt(x1(i))); y2(i)=(1/3.1415926)*asin(sqrt(x2(i))); end n=1; for i=1:1:M %由yl和y2序列对原图像进行值替代加密 for j=1:1:N if mod(n,1)==0 k(n)=mod(floor(y1(n)*10^15),256); else k(n)=mod(floor(y2(n)*10^15),256); end A1(i,j)=bitxor(A(i,j),k(n)); %得到加密像素 n=n 1; end end figure,imshow(A1);title('混沌加密图像') %输出得到的加密图像 n=1; for i=1:1:M for j=1:1:N if mod(n,1)==0 k(n)=mod(floor(y1(n)*10^15),256); else k(n)=mod(floor(y2(n)*10^15),256); end A2(i,j)=bitxor(A1(i,j),k(n)); %得到加密像素 n=n 1; end end figure,imshow(A2);title('解密图像') %输出得到的解密图像
该过程思路和图像转换的思路是一样的,but 的简单的电报加密显然不是一次层次的,加密效果是刚刚的,一点看不出来是什么东西。解密有点每种不足的就是彩图变黑白图。过冷水会尝试去解决该问题的让其变的完美,于是就有找到了一种加密和解密的方法
%%图像加密 img=imread('13.jpg');%img代表原图像矩阵 figure,imshow(img);title('原图') img(1,1,1) img=double(img); sizel=size(img) img_1=img(:);%img_1代表拉直后的图像矩阵 password=[8,12,14,16,3,7,9]; vx=password [x1,x2]=size(password);%密码的长和宽 k=1; while x2<1000 p2=password*3 password=[password p2] [x1,x2]=size(password) k=k 1 end [m,n]=size(password) img_new=zeros(size(img));%新图像的矩阵 c1=zeros(size(img)); j=1; for x=1:sizel(1) for y=1:sizel(2) for z=1:sizel(3) img_new(x,y,z)=img(x,y,z) password(j); img_new(x,y,z)=mod(img_new(x,y,z),256); j=j 1; if j==n j=1; end end end end figure,imshow(uint8(img_new));title('加密图') %%图像解密 img=double(img_new); j=1; for x=1:sizel(1) for y=1:sizel(2) for z=1:sizel(3) img_new(x,y,z)=img(x,y,z)-password(j); img_new(x,y,z)=mod(img_new(x,y,z),256); j=j 1; if j==n j=1; end end end end figure,imshow(uint8(img_new));title('解密图')
加密和解密就像是两个逆过程,懂得加密自然就懂得解密。掌握的这个计算后比如QQ问有些图是不让发的,一发就尽,比如某些网站是不然发二维码的,二维码传不过去,这个时候你就可以上传加密图像,一堆马赛克肯定没问题,在付上一段解密码,就完美传出去了 ,该看的图始终还是会看到。是不是很实用?快快尝试吧!这就本期过冷水和大家分享的图像加密解密的方法。
过冷水发表于 仿真秀 平台原创文章,未经授权禁止私自转载,如需转载请需要和作者沟通表明授权声明,未授权文章皆视为侵权行为,必将追责。如果您希望加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载均可加群:927550334。
精品回顾
过冷水和你分享 matlab读取存储各种文件的方法 文末有独家金曲分享