Matlab灰度NxN图像的Arnold加密与解密

该博客介绍了如何使用Matlab进行灰度图像的Arnold加密和解密。通过循环和矩阵变换,对图像进行加密,并在加密过程中找到周期d。加密和解密算法的关键在于特定的矩阵和循环次数k。加密后的图像通过imwrite()函数保存,以避免白边。同时,解密过程涉及到矩阵逆置和负坐标处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

加密部分

A=imread('~/Desktop/11.jpg');

C=imread('~/Desktop/11.jpg');

C=rgb2gray(C);

A=rgb2gray(A);

imshow(A);

for k=1:50

    

     for x=1:508

        for y=1:508

            x1=x+y;

            y1=x+2*y;

            if(x1>508)

                x1=mod(x1,508);

            end

            if(y1>508)

                y1=mod(y1,508);

            end

            if x1==0

                x1=508;

            end

            if y1==0

                y1=508;

            end

            B(x1,y1)=A(x,y);

        end

     end

     A=B;

     if(A==C)

         d=k;

     end

end

imshow(B);

imwrite(B,'111.png');

 注意 1,可以增加足够大的K值来找出周期d

在图片N=508的情况下,d=1152

2,如果倒入的是灰度图像 那么rgb2gray()函数省略

3,此处使用的矩阵为{1 1;1 2}四个元素加上循环次数k共同组成密钥

4,导出png图片用imwrite()函数 否则会有不必要的白边!!!

加密前

加密后 k=50

 

 

解密部分

clear

A=imread('~/Desktop/22.jpg');

for k=1:50

    

     for x=1:508

        for y=1:508

            x1=2*x-y;

            y1=y-x;

            if(x1>508)

                x1=mod(x1,508);

            end

            if(y1>508)

                y1=mod(y1,508);

            end

            if x1<0

                x1=x1+508;

            end

            if y1<0

                y1=y1+508;

            end

            if x1==0

                x1=508;

            end

            if y1==0

                y1=508;

            end

            B(x1,y1)=A(x,y);

        end

     end

     A=B;

end

imshow(B);

imwrite(B,'123.png');

与加密部分大致相同,区别是要把矩阵逆置,且过程中如果x1,y1出现负值的时候,要做出相应的处理

解密前

解密后

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值