LSB图片信息隐藏隐藏实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上海电力学院高级程序设计(C)课程设计报告
LSB信息隐藏实验
题目:
院系:计算机科学与技术学院
专业年级:信息安全2012级
学生姓名:涂桂花学号:
指导教师:魏为民
2015年4月14日
目录
一、实验目的 0
二、实验内容和步骤 0
1. 操作环境 0
2. 系统配置 0
3. 操作步骤 0
4. 程序源代码 (3)
三、实验结果 (3)
1. 测试图片 (3)
2. 测试结果 (3)
3.截屏 (4)
四.实验小结 (4)
1. 遇到的问题总结合分析: (4)
2. 未解决的问题 (4)
3. 实验效果和分析 (4)
4. 总结: (4)
附件: (5)
上 海 电 力 学 院
实 验 报 告 课程名称
实验项目 姓名 学号 班级 专业
同组人姓名 指导教师 魏为民 实验日期 一、实验目的
1.用MATLAB 函数实现LSB 信息隐藏和提取。

2.了解信息隐藏的作用和实现方法原理。

3.学会分析了解隐藏算法。

二、实验内容和步骤
如操作环境、系统配置、操作步骤、程序源代码等。

1.操作环境
操作系统 Windows 7 旗舰版 64位 SP1 ( DirectX 11 )
2.系统配置
处理器 AMD E1-2100 APU with Radeon HD Graphics 双核
3.操作步骤
1) 打开MATLAB 软件,新建文件夹名为“ LSB ”。

2) 在“Command Window ”窗口里输入“guide ”,回车。

a. 如下图所示建立图形界面。

将5个push button 控件的“String ”属性设置为下图相应显示的名字,Tag 属性设置为pbt+String 名的格式。

将4个axec 控件的Tag 属性设置为如下图所显示的名字。

3) 分别右键点击5个push button 控件,View Callbacks->CallBacks.给每个控件添
信息安全 LSB 信息隐藏实验 涂桂花 20123333 2012252 信息安全 无
加Callback代码。

再添加代码之前要为该fig文件命名。

我在本次实验命名为
LSB3333.fig。

各个控件的代码如下:
% --- Executes on button press in pbtCover.
function pbtCover_Callback(hObject, eventdata, handles)
% hObject handle to pbtCover (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global gCover;
[gCover,sFile]=loadimg();
if isempty(gCover)
msgbox('Cover image is empty!','Warning','warn','modal');
return;
end
axes(handles.axCover);
imshow(gCover);
[iH iW iL]=size(gCover);
sMsg=[sFile,'[',num2str(iH),'*',num2str(iW),'*',num2str(iL),']'];
set(handles.text1,'String',sMsg);
% --- Executes on button press in pbtSecret.
function pbtSecret_Callback(hObject, eventdata, handles)
% hObject handle to pbtSecret (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global gSecret;
[gSecret ,sFile]=loadimg();
if isempty(gSecret)
msgbox('Secret image is empty!','Warning','warn','modal');
return;
end
axes(handles.axSecret);
imshow(gSecret);
[iH iW iL]=size(gSecret);
sMsg=[sFile,'[',num2str(iH),'*',num2str(iW),'*',num2str(iL),']'];
set(handles.text1,'String',sMsg);
set(handles.text2,'String','Secret Image');
% --- Executes on button press in pbtEmbed.
function pbtEmbed_Callback(hObject, eventdata, handles)
% hObject handle to pbtEmbed (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global gCover gSecret gStego;
if isempty(gCover)
msgbox('Cover image is empty!' , 'Warning' , 'warn' , 'modal' ); return;
end
if isempty(gSecret)
msgbox('gSecret image is empty!' , 'Warning' , 'warn' , 'modal' ); return;
end
[Hc,Wc,Lc]=size(gCover);
[Hs,Ws,Ls]=size(gSecret);
if (Hc~=Hs) || (Wc~=Ws) || (Lc~=Ls)
disp('Error: Not Match!' );
return;
end
gStego = uint8(bitor(bitand(gCover,254),bitshift(gSecret,-7))); imwrite(gStego, '~emTmp.bmp' );
axes(handles.axStego);
imshow(gStego,[]);
% --- Executes on button press in pbtExtract.
function pbtExtract_Callback(hObject, eventdata, handles)
% hObject handle to pbtExtract (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global gStego;
global gCover gSecret;
if isempty(gCover)
msgbox('Cover image is empty!' , 'Warning' , 'warn' , 'modal' ); return;
end
if isempty(gSecret)
msgbox('gSecret image is empty!' , 'Warning' , 'warn' , 'modal' ); return;
end
[Hc,Wc,Lc]=size(gCover);
[Hs,Ws,Ls]=size(gSecret);
if (Hc~=Hs) || (Wc~=Ws) || (Lc~=Ls)
disp('Error: Not Match!' );
return;
end
gStego = uint8(bitor(bitand(gCover,254),bitshift(gSecret,-7))); imwrite(gStego, '~emTmp.bmp' );
axes(handles.axStego);
imshow(gStego,[]);
if isempty(gStego)
msgbox('Stego image is empty!' , 'Warning' , 'warn' , 'modal' ); return;
end
imExtract = uint8(bitand(255,bitshift(gStego,7)));
imwrite(imExtract, '~exTmp.bmp' );
axes(handles.axExtract);
imshow(imExtract);
msgbox('Extracted Image: ~exTmp.bmp' , 'Finished' );
% --- Executes on button press in pbtExit.
function pbtExit_Callback(hObject, eventdata, handles)
% hObject handle to pbtExit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
q=questdlg('Are you sure to exit?','figLSB','Yes','No','No');
if strcmp(q,'No')
return;
end
delete ~*.*
%delete (handles.figLSB);
delete (LSB3333);
4)将测试图片或者图片文件夹放在LSB文件夹下。

最后点击保存。

4.程序源代码
见附件。

三、实验结果
1.测试图片
①隐藏载体图:
Leno图片信息
②隐藏秘密图:
Boy图片信息
2.测试结果
①隐藏后的图片信息:
②从隐藏后的图中提取出来的秘密图片信息:
3.截屏
四.实验小结
1. 遇到的问题总结合分析:
(1)问题:点击退出按键后选择退出Yes,不能完全退出。

解决方法:查看源代码,经过分析,代码没有错,但是没有实现退出该fig图形窗体而是仅仅退出了询问是否退出的box的小窗口。

经过改正源代码后,可实现完全退出。

更改后的代码如下【即将原来的delete(handles.figLSB)改为delete(LSB3333)】:q=questdlg('Are you sure to exit?','figLSB','Yes','No','No');
if strcmp(q,'No')
return;
end
delete ~*.*
%delete (handles.figLSB);
delete (LSB3333);
(2)问题:老师提供的代码会出现如下图片的一些问题。

①没有选择Secret Message图片也能进行信息图片的隐藏和提取
②没有添加Cover图片也能进行信息的隐藏和提取
③没有添加Cover和Secret图片,不能进行信息隐藏,却能进行信息提取
解决方法:分析老师提供的源代码后,进行改进可解决上述出现的问题,即在没有选择Cover图片或者Secret图片的时候,都不能进行信息隐藏和提取。

结果截图如下:
2. 未解决的问题
①问题描述:没有点击Cover控件和Secret控件选择Cover或者Secret图片或者不选择,也能进行隐藏和提取。

分析:没有设计代码判断axec控件是否有图片内容。

②问题描述:对于不同格式或者不同大小或者灰白和彩色不同的图片不能进行信息图片的隐藏和提取。

分析:本实验代码只能对同种格式且大小相同的图片进行信息图片的隐藏和提取,对于不同格式大小相同或者格式相同大小不同的图片不能进行隐藏和提取。

3. 实验效果和分析
①LSB算法的抗攻击能力
本实验算法比较简单,抗攻击能力弱。

②随机选择嵌入位(安全性因素的考虑)
本实验算法不能随机选择隐藏信息图片的嵌入位,在本程序中设置的为程序默认值,不能提供安全性,可设计随机生成0-7的随机数对信息图形的不同位置随机进行嵌入。

再增加隐藏和提取的用户口令则会使安全性更好。

③嵌入位均匀分布于载体
每次对图像的一个字节的同一个位嵌入,都是同一个位置,这导致分布不均匀。

若实现随机嵌入图像的不同字节时不同嵌入位可提高嵌入位的均匀分布于载体。

④信息提取的检错/纠错
本实验提取出来的图片和原本要隐藏的信息图片不一样。

4. 总结:
本实验比较简单,在理解了图形信息隐藏的实质和代码的意义后就能很快理解和掌握。

不足的是不能将带算法优化已解决遇到的各种问题。

将会在以后的学习当中注意知
识的积累和灵活运行。

附件:
源代码:
function varargout = LSB3333(varargin)
% LSB3333 MATLAB code for LSB3333.fig
% LSB3333, by itself, creates a new LSB3333 or raises the existing % singleton*.
%
% H = LSB3333 returns the handle to a new LSB3333 or the handle to % the existing singleton*.
%
% LSB3333('CALLBACK',hObject,eventData,handles,...) calls the
local
% function named CALLBACK in LSB3333.M with the given input arguments. %
% LSB3333('Property','Value',...) creates a new LSB3333 or raises the % existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before LSB3333_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to LSB3333_OpeningFcn via varargin. %
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help LSB3333
% Last Modified by GUIDE v2.5 14-Apr-2015 10:08:25
% Begin initialization code - DO NOT EDIT
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', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before LSB3333 is made visible.
function LSB3333_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to LSB3333 (see VARARGIN)
% Choose default command line output for LSB3333
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes LSB3333 wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. function varargout = LSB3333_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pbtCover.
function pbtCover_Callback(hObject, eventdata, handles)
% hObject handle to pbtCover (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
global gCover;
[gCover,sFile]=loadimg();
if isempty(gCover)
msgbox('Cover image is empty!','Warning','warn','modal');
return;
end
axes(handles.axCover);
imshow(gCover);
[iH iW iL]=size(gCover);
sMsg=[sFile,'[',num2str(iH),'*',num2str(iW),'*',num2str(iL),']'];
set(handles.text1,'String',sMsg);
% --- Executes on button press in pbtSecret.
function pbtSecret_Callback(hObject, eventdata, handles)
% hObject handle to pbtSecret (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA) global gSecret;
[gSecret ,sFile]=loadimg();
if isempty(gSecret)
msgbox('Secret image is empty!','Warning','warn','modal');
return;
end
axes(handles.axSecret);
imshow(gSecret);
[iH iW iL]=size(gSecret);
sMsg=[sFile,'[',num2str(iH),'*',num2str(iW),'*',num2str(iL),']']; set(handles.text1,'String',sMsg);
set(handles.text2,'String','Secret Image');
% --- Executes on button press in pbtEmbed.
function pbtEmbed_Callback(hObject, eventdata, handles)
% hObject handle to pbtEmbed (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global gCover gSecret gStego;
if isempty(gCover)
msgbox('Cover image is empty!' , 'Warning' , 'warn' , 'modal' ); return;
end
if isempty(gSecret)
msgbox('gSecret image is empty!' , 'Warning' , 'warn' , 'modal' ); return;
end
[Hc,Wc,Lc]=size(gCover);
[Hs,Ws,Ls]=size(gSecret);
if (Hc~=Hs) || (Wc~=Ws) || (Lc~=Ls)
disp('Error: Not Match!' );
return;
end
gStego = uint8(bitor(bitand(gCover,254),bitshift(gSecret,-7))); imwrite(gStego, '~emTmp.bmp' );
axes(handles.axStego);
imshow(gStego,[]);
% --- Executes on button press in pbtExtract.
function pbtExtract_Callback(hObject, eventdata, handles)
% hObject handle to pbtExtract (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global gStego;
global gCover gSecret;
if isempty(gCover)
msgbox('Cover image is empty!' , 'Warning' , 'warn' , 'modal' ); return;
end
if isempty(gSecret)
msgbox('gSecret image is empty!' , 'Warning' , 'warn' , 'modal' ); return;
end
[Hc,Wc,Lc]=size(gCover);
[Hs,Ws,Ls]=size(gSecret);
if (Hc~=Hs) || (Wc~=Ws) || (Lc~=Ls)
disp('Error: Not Match!' );
return;
end
gStego = uint8(bitor(bitand(gCover,254),bitshift(gSecret,-7))); imwrite(gStego, '~emTmp.bmp' );
axes(handles.axStego);
imshow(gStego,[]);
if isempty(gStego)
msgbox('Stego image is empty!' , 'Warning' , 'warn' , 'modal' ); return;
end
imExtract = uint8(bitand(255,bitshift(gStego,7)));
imwrite(imExtract, '~exTmp.bmp' );
axes(handles.axExtract);
imshow(imExtract);
msgbox('Extracted Image: ~exTmp.bmp' , 'Finished' );
% --- Executes on button press in pbtExit.
function pbtExit_Callback(hObject, eventdata, handles)
% hObject handle to pbtExit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
q=questdlg('Are you sure to exit?','figLSB','Yes','No','No');
if strcmp(q,'No')
return;
end
delete ~*.*
%delete (handles.figLSB);
delete (LSB3333);。

相关文档
最新文档