首页/文章/ 详情

学习图像的matlab加密处理

3年前浏览3846

image.png

 过冷水诚挚邀请你加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载,群号:927550334

QQ图片20210424105303.png     

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

        举了两个案例让大家了解日常接触到的了信息转换。本期过冷水要讲的图像加密就是类似处理。

图片1.png

untitled1.jpg

untitled2.jpg

%加密方法,混沌序列
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 的简单的电报加密显然不是一次层次的,加密效果是刚刚的,一点看不出来是什么东西。解密有点每种不足的就是彩图变黑白图。过冷水会尝试去解决该问题的让其变的完美,于是就有找到了一种加密和解密的方法

untitled8.jpg

%%图像加密
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绘制农夫过河动态图

分子动力学的原子空间运动轨迹演示编程

过冷水带你用matlab制作演示动画

python批量移动文件&重命名代码分享

过冷水和你分享 matlab读取存储各种文件的方法 文末有独家金曲分享

image.png

附件

免费图像加密&解密.rar
理论科普代码&命令MATLAB
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2021-04-17
最近编辑:3年前
过冷水
博士 | 讲师 讨论号:927550334
获赞 358粉丝 180文章 107课程 11
点赞
收藏
未登录
2条评论
北安
签名征集中
3年前
这是一个真正的大佬
回复
过冷水
讨论号:927550334
3年前
仿真平台的matlab仿真交流群正式创建。**:927550334。欢迎加入Matlab仿真圈旨在为大家提供一个良好的matlab学习交流平台。群内长期分享各类与matlab编程有关的资料程序,群内有各行各业精通matlab的资深从业者算法工匠 好学懿 伟sss坐镇指导,能够解决matlab应用过程中的各种难题。欢迎大家入圈。
回复
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈