📄 decryption.m
字号:
clear all;
Image=double(imread('e:\资料\图象数据库\001.jpg'));
figure(1)
subplot(2,2,1)
imshow(Image,[]);
title('加密图像');
Ih=size(Image,1);
Iw=size(Image,2);
key=double(input('请输入解密密钥:','s'));
len=length(key);
while(mod(len,4)~=0)
len=len+1;
key(len)=15;
end
N=len/4;
for(i=1:Ih)
for(j=1:Iw)
Imagebak(i,j)=Image(i,j);
end
end
for(n=N:-1:1)
select=mod(key((n-1)*4+1),4);
switch(select)
case 0
a=1;
b=mod(key((n-1)*4+2),Ih);
c=mod(key((n-1)*4+3),Ih);
d=mod((b*c+1),Ih);
case 1
a=mod(key((n-1)*4+2),Ih);
b=1;
c=mod(a*mod(key((n-1)*4+3),Ih)-1,Ih);
d=mod(key((n-1)*4+3),Ih);
case 2
a=mod(key((n-1)*4+2),Ih);
b=mod(a*mod(key((n-1)*4+3),Ih)-1,Ih);
c=1;
d=mod(key((n-1)*4+3),Ih);
case 3
a=mod(key((n-1)*4+2),Ih)*mod(key((n-1)*4+3),Ih);
b=mod(key((n-1)*4+2),Ih);
c=mod(key((n-1)*4+3),Ih);
d=1;
end
iterative=mod(key((n-1)*4+4),17);
if(iterative<10)
iterative=iterative+10;%为防止迭代次数过多或过少,取模17后的值,但若小于10则要加上10
end
for(i=1:Ih)
for(j=1:Iw)
absc=i-1;
ordi=j-1;
for(k=1:iterative)
absc1=mod((d*absc-b*ordi),Ih);
ordi1=mod((a*ordi-c*absc),Iw);
if(absc1==0)
absc1=Ih;
end
if(ordi1==0)
ordi1=Iw;
end
absc=absc1-1;
ordi=ordi1-1;
% imagebak[i][j]=(image[i][j]+G*abs(absc-ordi))%256;
end
Deimage(absc1,ordi1)=Imagebak(i,j);
end
end
for(i=1:Ih)
for(j=1:Iw)
Imagebak(i,j)=Deimage(i,j);
end
end
end
figure(1)
subplot(2,2,2)
imshow(Deimage,[]);
title('原图像');
Deimage=uint8(Deimage);
imwrite(Deimage,'Detest.bmp','bmp');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -