# shamir叠像术

K=imread('SHNU.bmp');

height=info.Height;
width=info.Width;
A=zeros(height,width);
B=zeros(height,width);
C=zeros(height,width);
% 随机生成A,B,C矩阵
for i=1: height
for j=1: width
random=rand()*2;
if(random>1)
A(i,j)=1;B(i,j)=1;C(i,j)=1;
else
A(i,j)=0;B(i,j)=0;C(i,j)=0;
end
end
end
%%%%%生成子秘钥A,B,C图片
for i=1: height
for j=1: width
if(K(i,j)==0)
random=rand()*4;

if(random<1)
A(i,j)=0;A(i,j+1)=0;A(i+1,j)=1;A(i+1,j+1)=1;

B(i,j)=0;B(i+1,j)=0;B(i,j+1)=1;B(i+1,j+1)=1;

C(i,j)=0;C(i+1,j+1)=0;C(i,j+1)=1;C(i+1,j)=1;

else if(random<2)

A(i,j)=0;A(i,j+1)=0;A(i+1,j)=1;A(i+1,j+1)=1;

C(i,j+1)=0;C(i+1,j)=0;C(i,j)=1;C(i+1,j+1)=1;

B(i,j+1)=0;B(i+1,j+1)=0;B(i,j)=1;B(i+1,j)=1;

else if(random<3)

B(i,j)=0;B(i+1,j)=0;B(i,j+1)=1;B(i+1,j+1)=1;

A(i+1,j)=0;A(i+1,j+1)=0;A(i,j)=1;A(i,j+1)=1;

C(i,j+1)=0;C(i+1,j)=0;C(i,j)=1;C(i+1,j+1)=1;

else if(random<4)

B(i,j+1)=0;B(i+1,j+1)=0;B(i,j)=1;B(i+1,j)=1;

C(i,j)=0;C(i+1,j+1)=0;C(i,j+1)=1;C(i+1,j)=1;

A(i+1,j)=0;A(i+1,j+1)=0;A(i,j)=1;A(i,j+1)=1;

end
end
end
end

end
end
end
imwrite(A,'a.bmp','bmp');
imwrite(B,'b.bmp','bmp');
imwrite(C,'c.bmp','bmp');
figure
subplot(2,2,1),imshow(K);
subplot(2,2,2),imshow(A);
subplot(2,2,3),imshow(B);
subplot(2,2,4),imshow(C);
axes_handle = get(gcf, 'children');
axes(axes_handle(4)); title('original image');
axes(axes_handle(3)); title('image a');
axes(axes_handle(2)); title('image b');
axes(axes_handle(1)); title('image c');
%%%%隐藏信息的恢复
A1=imread('a.bmp');
B1=imread('b.bmp');
C1=imread('c.bmp');
random=rand()*3;
if(random<1)
K=A1;K12=A1;K13=A1;K23=A1;
else if(random<2)
K=B1;K12=B1;K13=B1;K23=B1;
else
K=C1;K12=C1;K13=C1;K23=C1;
end
end

for i=1: height-1
for j=1: width-1
if((xor(xor(A1(i,j),B1(i,j)),C1(i,j))==0)&&(xor(xor(A1(i,j+1),B1(i,j+1)),C1(i,j+1))==0)&&(xor(xor(A1(i+1,j),B1(i+1,j)),C1(i+1,j))==0)&&(xor(xor(A1(i+1,j+1),B1(i+1,j+1)),C1(i+1,j+1))==0))
K(i,j)=0;K(i,j+1)=0;K(i+1,j)=0;K(i+1,j+1)=0;

end

end

end
for i=1: height-1,
for j=1: width-1,
if((A1(i,j)||B1(i,j))==0&&(A1(i,j+1)||B1(i,j+1))==0&&(A1(i+1,j)||B1(i+1,j))==0&&(A1(i+1,j+1)||B1(i+1,j+1))==0)
K12(i,j)=0;K12(i,j+1)=0;K12(i+1,j)=0;K12(i+1,j+1)=0;

end

end
end
for i=1: height-1,
for j=1: width-1,
if((A1(i,j)||C1(i,j))==0&&(A1(i,j+1)||C1(i,j+1))==0&&(A1(i+1,j)||C1(i+1,j))==0&&(A1(i+1,j+1)||C1(i+1,j+1))==0)
K13(i,j)=0;K13(i,j+1)=0;K13(i+1,j)=0;K13(i+1,j+1)=0;

end
end
end
for i=1: height-1,
for j=1: width-1,
if((C1(i,j)||B1(i,j))==0&&(C1(i,j+1)||B1(i,j+1))==0&&(C1(i+1,j)||B1(i+1,j))==0&&(C1(i+1,j+1)||B1(i+1,j+1))==0)
K23(i,j)=0;K23(i,j+1)=0;K23(i+1,j)=0;K23(i+1,j+1)=0;

end

end
end

imwrite(K,'K.bmp','bmp')
imwrite(K12,'image_a+b.bmp','bmp')
imwrite(K13,'image_a+c.bmp','bmp')
imwrite(K23,'image_b+c.bmp','bmp')
figure
imshow(K);
title('recovery image');
figure
subplot(2,2,1),imshow(K12);
subplot(2,2,2),imshow(K13);
subplot(2,2,3),imshow(K23);
axes_handle = get(gcf, 'children');
axes(axes_handle(3)); title('image a+b');
axes(axes_handle(2)); title('image a+c');
axes(axes_handle(1)); title('image b+c');

• 本文已收录于以下专栏：

## 话术

• jimoshuicao
• 2013年06月18日 09:49
• 1769

## 为什么你的脸上不见笑容

• shuqin1984
• 2013年11月15日 19:22
• 1198

## 经典门限秘密共享方案

1 门限秘密共享的概念：(k,n)门限秘密共享表示把秘密信息分成n份无意义的子秘密，只有拥有至少k份子秘密才能恢复秘密信息，可以提高安全性。 2 经典门限秘密共享方案 2.1shamir的门限秘密共享...
• qq_31917799
• 2017年03月20日 19:08
• 2880

## C#_RSA的加解密与签名验证

C#_RSA的加解密与签名验证 RSA加密算法是一种非对称加密算法。在公钥加密标准和电子商业中RSA被广泛使用。RSA是1977年由罗纳德•李维斯特（Ron Rivest）、阿迪•萨...
• cuoban
• 2015年05月04日 17:00
• 264

## Shamir在密码学中的主要贡献

Shamir  学习信息安全的人都知道。总结他在密码学中的贡献主要有： 1.RSA 2
• alice707
• 2014年04月07日 16:30
• 477

## 基于OpenSSL简单实现Shamir基于身份的数字签名算法

1. 基于身份认证协议简介一般基于公钥密码体质的签名认证方案，像RSA都需要用户交换私钥或公钥，一般的认证过程如图1所示：B要验证消息m是否是A发送的，首先要获得A的公钥A先计算m的摘要，再用自己的私...
• dyllove98
• 2013年03月04日 23:24
• 1983

## 那些整天脸上都挂着笑容的人，你真的了解他们吗

• tibjsmoeg
• 2012年10月20日 11:08
• 2482

## 用割圆术求圆周率π

• sanqima
• 2014年06月12日 09:28
• 1822

## 我程序世界的“术”与“道”

17年前高考的时候，本人就立志要从事所谓的科技行业，所以在填写志愿的时候填写的是通信工程，顺便后面同意了服从志愿调剂。就因为服从调剂，我这个完全能上得了通信工程专业分数的人得到了“爱因斯坦”老先生的眷...
• u012935160
• 2014年09月24日 21:38
• 2013

## 读《超级询问术》有感二

• jeanliam
• 2017年05月22日 10:13
• 339

举报原因： 您举报文章：shamir叠像术 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)