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

加密部分

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()函数 否则会有不必要的白边!!!

Matlab灰度NxN图像的Arnold加密与解密_第1张图片

加密前

Matlab灰度NxN图像的Arnold加密与解密_第2张图片

加密后 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出现负值的时候,要做出相应的处理

Matlab灰度NxN图像的Arnold加密与解密_第3张图片

解密前

Matlab灰度NxN图像的Arnold加密与解密_第4张图片

解密后

 

转载于:https://www.cnblogs.com/LvBaiYang/p/6525493.html

你可能感兴趣的:(Matlab灰度NxN图像的Arnold加密与解密)