

原始文本 :
我们认为,读者可以把有关你们作品的消息传达到每一个作者。《我们的作者》张宪文就介绍读者认真阅读作者随侯珠的作品《拾光里的我们》,以及作者天街凉茶的作品《 [综]我们和离吧》。
-----------------------------
载体文本 :
你们认为,作者可以把有关读者作品的消息传达到每一个我们。《作者的作者》张宪文就介绍读者认真阅读作者随侯珠的作品《拾光里的我们》,以及作者天街凉茶的作品《 [综]我们和离吧》。
-----------------------------
同义词 :
我们
你们
作者
读者
-----------------------------
日期编码 :
今天
明天
3天后
5天后
-----------------------------
时间编码 :
上午8点
上午10点
下午15点
上次见面约定时间
-----------------------------
地点编码 :
麓山南路晓魅清吧
上次见面约定地点
赤岭路迷藏BAR
文源路您大超市
-----------------------------
方式编码 :
单独见面
另带1人
另带2人
上次见面约定人数
-----------------------------
要求编码 :
左手倒持《参考消息》
右手倒持2朵玫瑰
左手掌挽白色丝巾
上次见面约定要求
-----------------------------
秘密信息 :
明天
下午15点
文源路您大超市
单独见面
左手掌挽白色丝巾
-----------------------------
嵌入算法 :
%
% 文本信息隐藏、文本水印 信息嵌入演示程序
%
% 车生兵 著
%
% 打开实验必需的文件,获取实验数据
fid_yswb=fopen('yswb.txt');
fid_tyc=fopen('tyc.txt');
fid_ztwb=fopen('ztwb.txt','r+');
fid_mmxx=fopen('mmxx.txt');
fid_bm1=fopen('bm1.txt');
fid_bm2=fopen('bm2.txt');
fid_bm3=fopen('bm3.txt');
fid_bm4=fopen('bm4.txt');
fid_bm5=fopen('bm5.txt');
% 读取原始文本yswb.txt
fseek(fid_yswb, 0, 'bof');
yswb=fgetl(fid_yswb);
% 读取定义的同义词tyc.txt
fseek(fid_tyc, 0, 'bof');
for i=1:1:4
t=fgetl(fid_tyc);
tyc(i,:)=t;
end
% 读取载体文本ztwb.txt
fseek(fid_ztwb, 0, 'bof');
ztwb=fgetl(fid_ztwb);
% 读取待传播的秘密信息mmxx.txt
fseek(fid_mmxx, 0, 'bof');
for i=1:1:5
t=fgetl(fid_mmxx);
switch i
case 1
mmxx1=t;
case 2
mmxx2=t;
case 3
mmxx3=t;
case 4
mmxx4=t;
case 5
mmxx5=t;
end
end
mmxx={mmxx1;mmxx2;mmxx3;mmxx4;mmxx5};
% 读取编码信息bm1.txt:日期
fseek(fid_bm1, 0, 'bof');
for i=1:1:5
t=fgetl(fid_bm1);
switch i
case 1
bm11=t;
case 2
bm12=t;
case 3
bm13=t;
case 4
bm14=t;
end
end
bm1={bm11;bm12;bm13;bm14};
% 读取编码信息bm2.txt:时间
fseek(fid_bm2, 0, 'bof');
for i=1:1:5
t=fgetl(fid_bm2);
switch i
case 1
bm21=t;
case 2
bm22=t;
case 3
bm23=t;
case 4
bm24=t;
end
end
bm2={bm21;bm22;bm23;bm24};
% 读取编码信息bm3.txt:地点
fseek(fid_bm3, 0, 'bof');
for i=1:1:5
t=fgetl(fid_bm3);
switch i
case 1
bm31=t;
case 2
bm32=t;
case 3
bm33=t;
case 4
bm34=t;
end
end
bm3={bm31;bm32;bm33;bm34};
% 读取编码信息bm4.txt:方式
fseek(fid_bm4, 0, 'bof');
for i=1:1:5
t=fgetl(fid_bm4);
switch i
case 1
bm41=t;
case 2
bm42=t;
case 3
bm43=t;
case 4
bm44=t;
end
end
bm4={bm41;bm42;bm43;bm44};
% 读取编码信息bm5.txt:对方要求
fseek(fid_bm5, 0, 'bof');
for i=1:1:5
t=fgetl(fid_bm5);
switch i
case 1
bm51=t;
case 2
bm52=t;
case 3
bm53=t;
case 4
bm54=t;
end
end
bm5={bm51;bm52;bm53;bm54};
% 复制载体文本ztwb.txt初始值为原始文本yswb.txt
copyfile('yswb.txt','ztwb.txt');
% 根据要传送的秘密信息mmxx.txt生成秘密信息编码mxbm,例如:2、3、4、1、3
for i=1:1:5
switch i
case 1
t1=bm1;
case 2
t1=bm2;
case 3
t1=bm3;
case 4
t1=bm4;
case 5
t1=bm5;
end
mxbm(i)=0;
for j=1:1:4
if ( strcmp(mmxx(i),t1(j)) )
mxbm(i)=j;
break;
end
end
end
% 搜索ztwb.txt,发现同义词库中的词汇,依次用mxbm指定的词汇替换
% 在载体文本中搜索同义词库中包含的同义词及其位置
% 搜索结果:t1=[ 1 59 121 158]; t2=[25]; t3=[51 65 95 133]; t4=[11 83];
t1=findstr(ztwb,tyc(1,:));
t2=findstr(ztwb,tyc(2,:));
t3=findstr(ztwb,tyc(3,:));
t4=findstr(ztwb,tyc(4,:));
% 在找到的同义词位置按照从小到大获得前5个替换位置thwz,例如:1,11,25,51,59,65,83,95,121,133,158
t=[t1,t2,t3,t4];
thwz=sort(t);
% 用替换列表thlb中的同义词替换掉载体文本ztwb中替换位置thwz处的同义词
for i=1:1:5
ztwb(thwz(i):thwz(i)+3)=tyc(round(mxbm(i)),:);
end
% 写入载体文本
fseek(fid_ztwb, 0, 'bof');
fwrite(fid_ztwb,ztwb);
% 关闭打开的文件
fclose(fid_yswb);
fclose(fid_tyc);
fclose(fid_ztwb);
fclose(fid_mmxx);
fclose(fid_bm1);
fclose(fid_bm2);
fclose(fid_bm3);
fclose(fid_bm4);
fclose(fid_bm5);
% 程序运行结束
-----------------------------
提取算法 :
%
% 文本信息隐藏、文本水印 信息提取演示程序
%
% 车生兵 著
%
clear all;
% 打开实验必需的文件,获取实验数据
fid_tyc=fopen('tyc.txt');
fid_ztwb=fopen('ztwb.txt');
fid_tqxx=fopen('tqxx.txt','r+');
fid_bm1=fopen('bm1.txt');
fid_bm2=fopen('bm2.txt');
fid_bm3=fopen('bm3.txt');
fid_bm4=fopen('bm4.txt');
fid_bm5=fopen('bm5.txt');
% 读取定义的同义词tyc.txt
fseek(fid_tyc, 0, 'bof');
for i=1:1:4
t=fgetl(fid_tyc);
tyc(i,:)=t;
end
% 读取载体文本ztwb.txt
fseek(fid_ztwb, 0, 'bof');
ztwb=fgetl(fid_ztwb);
% 读取编码信息bm1.txt:日期
fseek(fid_bm1, 0, 'bof');
for i=1:1:5
t=fgetl(fid_bm1);
switch i
case 1
bm11=t;
case 2
bm12=t;
case 3
bm13=t;
case 4
bm14=t;
end
end
bm1={bm11;bm12;bm13;bm14};
% 读取编码信息bm2.txt:时间
fseek(fid_bm2, 0, 'bof');
for i=1:1:5
t=fgetl(fid_bm2);
switch i
case 1
bm21=t;
case 2
bm22=t;
case 3
bm23=t;
case 4
bm24=t;
end
end
bm2={bm21;bm22;bm23;bm24};
% 读取编码信息bm3.txt:地点
fseek(fid_bm3, 0, 'bof');
for i=1:1:5
t=fgetl(fid_bm3);
switch i
case 1
bm31=t;
case 2
bm32=t;
case 3
bm33=t;
case 4
bm34=t;
end
end
bm3={bm31;bm32;bm33;bm34};
% 读取编码信息bm4.txt:方式
fseek(fid_bm4, 0, 'bof');
for i=1:1:5
t=fgetl(fid_bm4);
switch i
case 1
bm41=t;
case 2
bm42=t;
case 3
bm43=t;
case 4
bm44=t;
end
end
bm4={bm41;bm42;bm43;bm44};
% 读取编码信息bm5.txt:对方要求
fseek(fid_bm5, 0, 'bof');
for i=1:1:5
t=fgetl(fid_bm5);
switch i
case 1
bm51=t;
case 2
bm52=t;
case 3
bm53=t;
case 4
bm54=t;
end
end
bm5={bm51;bm52;bm53;bm54};
% 搜索ztwb.txt,发现同义词库中的词汇x的替换位置thwz
% 在载体文本中搜索同义词库中包含的同义词及其位置
% 搜索结果:t1=[ 51 121 158]; t2=[1]; t3=[11 59 65 95 133]; t4=[25 83];
t1=findstr(ztwb,tyc(1,:));
t2=findstr(ztwb,tyc(2,:));
t3=findstr(ztwb,tyc(3,:));
t4=findstr(ztwb,tyc(4,:));
% 在找到的同义词位置按照从小到大获得前5个替换位置thwz,例如:1,11,25, 51, 59, 65, 83,95,121,133,158
t=[t1,t2,t3,t4];
thwz=sort(t);
% 生成秘密信息编码mxbm,例如:2、3、4、1、3
for i=1:1:5
mxbm(i)=0;
for j=1:1:4
if ( strcmp( ztwb( thwz(i):thwz(i)+3 ),tyc(j,:) ) )
mxbm(i)=j;
break;
end
end
end
% 根据编码合成提取信息tqxx
tqxx='';
for i=1:1:5
switch i
case 1
tqxx=strcat(tqxx,bm1(mxbm(i),:));
case 2
tqxx=strcat(tqxx,bm2(mxbm(i),:));
case 3
tqxx=strcat(tqxx,bm3(mxbm(i),:));
case 4
tqxx=strcat(tqxx,bm4(mxbm(i),:));
case 5
tqxx=strcat(tqxx,bm5(mxbm(i),:));
end
end
% 将cell类型的串转换成char array类型的串
TQXX=tqxx{1};
% 写入提取信息tqxx.txt
fseek(fid_tqxx, 0, 'bof');
fwrite(fid_tqxx,TQXX);
% 关闭打开的文
fclose(fid_tyc);
fclose(fid_ztwb);
fclose(fid_tqxx);
fclose(fid_bm1);
fclose(fid_bm2);
fclose(fid_bm3);
fclose(fid_bm4);
fclose(fid_bm5);
% 程序运行结束
-----------------------------
提取信息 :
明天下午15点文源路您大超市单独见面左手掌挽白色丝巾