LSB图片信息隐藏隐藏实验Word格式.docx
《LSB图片信息隐藏隐藏实验Word格式.docx》由会员分享,可在线阅读,更多相关《LSB图片信息隐藏隐藏实验Word格式.docx(15页珍藏版)》请在冰点文库上搜索。
![LSB图片信息隐藏隐藏实验Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/9b540043-005e-4154-96b2-e43d546dfb2f/9b540043-005e-4154-96b2-e43d546dfb2f1.gif)
二、实验内容和步骤
如操作环境、系统配置、操作步骤、程序源代码等。
1.操作环境
操作系统Windows7旗舰版64位SP1(DirectX11)
2.系统配置
处理器AMDE1-2100APUwithRadeonHDGraphics双核
3.操作步骤
1)
打开MATLAB软件,新建文件夹名为“LSB”。
2)在“CommandWindow”窗口里输入“guide”,回车。
a.如下图所示建立图形界面。
将5个pushbutton控件的“String”属性设置为下图相应显示的名字,Tag属性设置为pbt+String名的格式。
将4个axec控件的Tag属性设置为如下图所显示的名字。
3)分别右键点击5个pushbutton控件,ViewCallbacks->
CallBacks.给每个控件添加Callback代码。
再添加代码之前要为该fig文件命名。
我在本次实验命名为LSB3333.fig。
各个控件的代码如下:
%---ExecutesonbuttonpressinpbtCover.
functionpbtCover_Callback(hObject,eventdata,handles)
%hObjecthandletopbtCover(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
globalgCover;
[gCover,sFile]=loadimg();
ifisempty(gCover)
msgbox('
Coverimageisempty!
'
'
Warning'
warn'
modal'
);
return;
end
axes(handles.axCover);
imshow(gCover);
[iHiWiL]=size(gCover);
sMsg=[sFile,'
['
num2str(iH),'
*'
num2str(iW),'
num2str(iL),'
]'
];
set(handles.text1,'
String'
sMsg);
%---ExecutesonbuttonpressinpbtSecret.
functionpbtSecret_Callback(hObject,eventdata,handles)
%hObjecthandletopbtSecret(seeGCBO)
globalgSecret;
[gSecret,sFile]=loadimg();
ifisempty(gSecret)
Secretimageisempty!
axes(handles.axSecret);
imshow(gSecret);
[iHiWiL]=size(gSecret);
set(handles.text2,'
SecretImage'
%---ExecutesonbuttonpressinpbtEmbed.
functionpbtEmbed_Callback(hObject,eventdata,handles)
%hObjecthandletopbtEmbed(seeGCBO)
globalgCovergSecretgStego;
'
);
gSecretimageisempty!
[Hc,Wc,Lc]=size(gCover);
[Hs,Ws,Ls]=size(gSecret);
if(Hc~=Hs)||(Wc~=Ws)||(Lc~=Ls)
disp('
Error:
NotMatch!
end
gStego=uint8(bitor(bitand(gCover,254),bitshift(gSecret,-7)));
imwrite(gStego,'
~emTmp.bmp'
axes(handles.axStego);
imshow(gStego,[]);
%---ExecutesonbuttonpressinpbtExtract.
functionpbtExtract_Callback(hObject,eventdata,handles)
%hObjecthandletopbtExtract(seeGCBO)
globalgStego;
globalgCovergSecret;
ifisempty(gStego)
Stegoimageisempty!
imExtract=uint8(bitand(255,bitshift(gStego,7)));
imwrite(imExtract,'
~exTmp.bmp'
axes(handles.axExtract);
imshow(imExtract);
msgbox('
ExtractedImage:
~exTmp.bmp'
Finished'
%---ExecutesonbuttonpressinpbtExit.
functionpbtExit_Callback(hObject,eventdata,handles)
%hObjecthandletopbtExit(seeGCBO)
q=questdlg('
Areyousuretoexit?
figLSB'
Yes'
No'
ifstrcmp(q,'
)
delete~*.*
%delete(handles.figLSB);
delete(LSB3333);
4)将测试图片或者图片文件夹放在LSB文件夹下。
最后点击保存。
4.程序源代码
见附件。
三、实验结果
1.测试图片
1 隐藏载体图:
Leno图片信息
2
隐藏秘密图:
Boy图片信息
2.测试结果
1 隐藏后的图片信息:
从隐藏后的图中提取出来的秘密图片信息:
3.截屏
4.实验小结
1.遇到的问题总结合分析:
(1)问题:
点击退出按键后选择退出Yes,不能完全退出。
解决方法:
查看源代码,经过分析,代码没有错,但是没有实现退出该fig图形窗体而是仅仅退出了询问是否退出的box的小窗口。
经过改正源代码后,可实现完全退出。
更改后的代码如下【即将原来的delete(handles.figLSB)改为delete(LSB3333)】:
(2)问题:
老师提供的代码会出现如下图片的一些问题。
1 没有选择SecretMessage图片也能进行信息图片的隐藏和提取
2 没有添加Cover图片也能进行信息的隐藏和提取
3 没有添加Cover和Secret图片,不能进行信息隐藏,却能进行信息提取
分析老师提供的源代码后,进行改进可解决上述出现的问题,即在没有选择Cover图片或者Secret图片的时候,都不能进行信息隐藏和提取。
结果截图如下:
2.未解决的问题
1 问题描述:
没有点击Cover控件和Secret控件选择Cover或者Secret图片或者不选择,也能进行隐藏和提取。
分析:
没有设计代码判断axec控件是否有图片内容。
2 问题描述:
对于不同格式或者不同大小或者灰白和彩色不同的图片不能进行信息图片的隐藏和提取。
本实验代码只能对同种格式且大小相同的图片进行信息图片的隐藏和提取,对于不同格式大小相同或者格式相同大小不同的图片不能进行隐藏和提取。
3.实验效果和分析
1 LSB算法的抗攻击能力
本实验算法比较简单,抗攻击能力弱。
2 随机选择嵌入位(安全性因素的考虑)
本实验算法不能随机选择隐藏信息图片的嵌入位,在本程序中设置的为程序默认值,不能提供安全性,可设计随机生成0-7的随机数对信息图形的不同位置随机进行嵌入。
再增加隐藏和提取的用户口令则会使安全性更好。
3 嵌入位均匀分布于载体
每次对图像的一个字节的同一个位嵌入,都是同一个位置,这导致分布不均匀。
若实现随机嵌入图像的不同字节时不同嵌入位可提高嵌入位的均匀分布于载体。
4 信息提取的检错/纠错
本实验提取出来的图片和原本要隐藏的信息图片不一样。
4.总结:
本实验比较简单,在理解了图形信息隐藏的实质和代码的意义后就能很快理解和掌握。
不足的是不能将带算法优化已解决遇到的各种问题。
将会在以后的学习当中注意知识的积累和灵活运行。
附件:
源代码:
functionvarargout=LSB3333(varargin)
%LSB3333MATLABcodeforLSB3333.fig
%LSB3333,byitself,createsanewLSB3333orraisestheexisting
%singleton*.
%
%H=LSB3333returnsthehandletoanewLSB3333orthehandleto
%theexistingsingleton*.
%LSB3333('
CALLBACK'
hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinLSB3333.Mwiththegiveninputarguments.
Property'
Value'
...)createsanewLSB3333orraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforeLSB3333_OpeningFcngetscalled.An
%unrecognizedpropertynameorinvalidvaluemakespropertyapplication
%stop.AllinputsarepassedtoLSB3333_OpeningFcnviavarargin.
%*SeeGUIOptionsonGUIDE'
sToolsmenu.Choose"
GUIallowsonlyone
%instancetorun(singleton)"
.
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%EdittheabovetexttomodifytheresponsetohelpLSB3333
%LastModifiedbyGUIDEv2.514-Apr-201510:
08:
25
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('
gui_Name'
mfilename,...
'
gui_Singleton'
gui_Singleton,...
gui_OpeningFcn'
@LSB3333_OpeningFcn,...
gui_OutputFcn'
@LSB3333_OutputFcn,...
gui_LayoutFcn'
[],...
gui_Callback'
[]);
ifnargin&
&
ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
%Endinitializationcode-DONOTEDIT
%---ExecutesjustbeforeLSB3333ismadevisible.
functionLSB3333_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%varargincommandlineargumentstoLSB3333(seeVARARGIN)
%ChoosedefaultcommandlineoutputforLSB3333
handles.output=hObject;
%Updatehandlesstructure
guidata(hObject,handles);
%UIWAITmakesLSB3333waitforuserresponse(seeUIRESUME)
%uiwait(handles.figure1);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=LSB3333_OutputFcn(hObject,eventdata,handles)
%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output;