您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > LSB信息隐藏实验报告
个人收集整理资料,仅供交流学习,勿作商业用途CentralSouthUniversity信息隐藏实验报告学院:信息科学与工程学院班级:信息安全1201学号:0909121724姓名:吕秋言时间:2018年6月实验一:基于图像的LSB信息隐藏一、实验目的该实验为验证性实验。目的是通过实验使学生掌握经典信息隐藏算法,在Matlab环境下,编写基于图像的LSB信息隐藏算法程序。用Matlab函数实现LSB信息隐藏及提取,并进行分析。b5E2RGbCAP二、实验要求1、实验前要做好充分准备,包括:复习实验所涉及的知识点,掌握Matlab编程语言和调试环境。2、实验时注意记录实验过程中产生的数据、出现的问题及解决问题的方法。个人收集整理资料,仅供交流学习,勿作商业用途2/193、理论联系实际,认真分析实验结果,回答思考题。4、实验后完成实验报告,并附相关截图。三、实验环境计算机安装VisualC++6.0和Matlab6.5以上版本)四、实验原理隐秘算法核心是将我们选取的像素点的最不重要位依次替换成秘密信息,以达到信息隐秘的目的。嵌入过程包括选择一个图像载体像素点的子集{j1,…,jl(m},然后在子集上执行替换操作像素cji←→mi,即把cji的LSB与秘密信息mi进行交换(mi可以是1或0。一个替换系统也可以修改载体图像像素点的多个比特,例如,在一个载体元素的两个最低比特位隐藏两比特、三比特信息,可以使得信息嵌入量大大增加但同时将破坏载体图像的质量。在提取过程中,找出被选择载体图像的像素序列,将LSB(最不重要位排列起来重构秘密信息,算法描述如下:p1EanqFDPw嵌入过程:for(i=1。i=像素序列个数。i++si←cifor(i=1。i=秘密消息长度。i++//将选取的像素点的最不重要位依次替换成秘密信息sji←cji←→mi提取过程:for(i=1。i=秘密消息长度。i++{i←→ji//序选取mi←LSB(cji个人收集整理资料,仅供交流学习,勿作商业用途3/19}五、实验内容与步骤基本演示环境:matlabLSB,LeastSignificantBits,最低有效位,将图像加密处理。这次将通过位平面的切割之后,嵌入一张隐私图片,一些人的隐私交流很有可能通过这个,比如美国的某某人,当然这个只是最简单的。DXDiTa9E3d位平面切割是将数字图像分解为位平面,比如上一篇文章讲到的图片的8位的数据类型,可以让我们每一位所起的作用。一边学的时候也带着疑问,为什么用bitget呢。RTCrpUDGiT经过实验也证明自己的想法是正确的,首先bitget(X,Y是拿到X二进制的值的Y位。[plain]viewplaincopy1.bitget(1,12.3.ans=4.5.16.个人收集整理资料,仅供交流学习,勿作商业用途4/197.bitget(1,28.9.ans=10.11.012.13.那么我们可以想想,一幅8位的数字图像无符号类型),最高是11111111二进制),即2^8-1,255,用大腿一想,当然是第八位起决定性作用,假如有一百万零一这个数字,少了最前面的一个一和最后面的一个一可是两码事。5PCzVD7HxA举个例子,我切除图像的一部分:[plain]viewplaincopy1.q=f(122:130,122:130。2.imwrite(q,'verysmall.jpg'。3.f=imread('verysmall.jpg'4.5.f=6.7.155154149141134129129130127个人收集整理资料,仅供交流学习,勿作商业用途5/198.1711691661611571541541541489.17317117017017117116916816310.16516416416717017217116916511.16616616716917117217217116812.17417517517417016916917017513.17918218117416415916016417214.18418618517416015215516016115.182185180167154149148148149每个像素点的值这么大。接下来:[plain]viewplaincopy1.t=bitget(f,82.个人收集整理资料,仅供交流学习,勿作商业用途6/193.t=4.5.1111111106.1111111117.1111111118.1111111119.11111111110.11111111111.11111111112.11111111113.11111111114.15.个人收集整理资料,仅供交流学习,勿作商业用途7/19最高位是决定性作用的一层。所以,要嵌入图像,就要嵌入到第一层,影响最小。[plain]viewplaincopy1.f=imread('lina.jpg'。2.g=bitget(f,8。这样g虽然是第八层的图像,但是都是二进制最高位的值,非0即1,而在为灰度图像看来,都是黑色。需要转换成二值图像。jLBHrnAILg[plain]viewplaincopy1.t=logical(g。接下来,我把自己的话嵌入到照片中。[plain]viewplaincopy1.b=imread('love.jpg'。2.c=im2bw(b。这次是反过来,我们是要把一幅8位数据类型的图像嵌入到位图中,那首先要把8位的数据转换成二进制,用上面的im2bw。xHAQX74J0X先看看嵌入到影响最大的一层的效果如何:[plain]viewplaincopy个人收集整理资料,仅供交流学习,勿作商业用途8/191.w=bitset(a,8,c。2.imshow(w接下来,嵌入到第一层:[plain]viewplaincopy1.w=bitset(a,1,c。2.imshow(w个人收集整理资料,仅供交流学习,勿作商业用途9/19几乎是看不到什么的,当你想看看你嵌入什么图像时,只需要把被替换的第一层取出。[plain]viewplaincopy1.y=bitget(w,1。2.imshow(logical(y1、随机选取图像载体像素,实现隐秘消息的嵌入与提取1)隐秘消息的嵌入%文件名:randlsbhide.m%函数功能:本函数将完成随机选择LSB的信息隐秘,载体选用灰度BMP图个人收集整理资料,仅供交流学习,勿作商业用途10/19%输入格式举例:[ste_cover,len_total]=randlsbhide(′glenna.bmp′,′message.txt′,′scover.bmp′,2001LDAYtRyKfE%参数说明:%input是信息隐蔽载体图像%file是秘密消息文件%output是信息隐秘后的生成图像%key是随机间隔函数的密钥function[ste_cover,len_total]=randlsbhide(input,file,output,keyZzz6ZB2Ltk%读入图像矩阵cover=imread(input。ste_cover=cover。ste_cover=double(ste_cover。%将文本文件转换为二进制序列f_id=fopen(file,′r′。[msg,len_total]=fread(f_id,′ubit1′。%判断嵌入消息量是否过大[m,n]=size(ste_cover。Iflen_totalm*nerror(′嵌入消息量过大,请更换图像′。end%p作为消息嵌入位数计数p=1。个人收集整理资料,仅供交流学习,勿作商业用途11/19%调用随机间隔函数选取像素点[row,col]=randinterval(ste_cover,len_total,key。%在LSB隐秘消息fori=1:len_totalste_cover(row(i,col(i=ste_cover(row(i,col(i-mod(ste_cover(row(i,col(i,2+msg(p,1。dvzfvkwMI1ifp==len_totalbreak。endp=p+1。endste_cover=uint8(ste_cover。imwrite(ste_cover,output。%显示实验结果subplot(1,2,1。imshow(cover。title(′原始图像′。subplot(1,2,2。imshow(output。title(′隐藏信息的图像′。个人收集整理资料,仅供交流学习,勿作商业用途12/192)编写函数比较两幅图像区别%文件名:compare.m%函数功能:本函数完成显示隐秘前后两幅图像的区别%输入格式举例:F=compare(′blenna.bmp′,′scover.bmp′%参数说明:%original是原始载体图像%hided是隐秘后的图像%F是差值矩阵functionF=compare(original,hided%读取原始载体图像矩阵W=imread(original。W=double(W/255。个人收集整理资料,仅供交流学习,勿作商业用途13/19%读取隐秘后图像矩阵E=imread(hided。E=double(E/255。%将两图像矩阵相减,显示效果%注意,MATLAB中矩阵相减只支持double型imshow(mat2gray(F3)隐秘消息的提取%文件名:randlsbget.m%函数功能:本函数将完成提取隐秘于LSB上的秘密消息%输入格式举例:result=randlsbget(′scover.jpg′,56,′secret.txt′,2001rqyn14ZNXI%参数说明:%output是信息隐秘后的图像个人收集整理资料,仅供交流学习,勿作商业用途14/19%len_total是秘密消息的长度%goalfile是提取出的秘密消息文件%key是随机间隔函数的密钥%result是提取的消息functionresult=randlsbget(output,len_total,goalfile,keyEmxvxOtOcoste_cover=imread(output。ste_cover=double(ste_cover。%判断嵌入消息量是否过大[m,n]=size(ste_cover。frr=fopen(goalfile,′a′。%p作为消息嵌入位数计数器,将消息序列写回文本文件p=1。%调用随机间隔函数选取像素点[row,col]=randinterval(ste_cover,len_total,key。fori=1:len_totalifbitand(ste_cover(row(i,col(i,1==1fwrite(frr,1,′bit1′。result(p,1=1。elsefwrite(frr,0,′bit1′。result(p,1=0。个人收集整理资料,仅供交流学习,勿作商业用途15/19endifp==len_totalbreak。endp=p+1。endfclose(frr。2、顺序选取图像载体像素,实现隐秘消息的嵌入与提取1)隐秘消息的嵌入%文件名:lsbhide.m%函数功能:本函数将完成在LSB上的顺序信息隐秘,载体选用灰度BMP图%输入格式举例:[ste_cover,len_total]=lsbhide(′glenna.bmp′,′message.txt′,′scover.bmp′SixE2yXPq5%参数说明:%input是信息隐蔽载体图像,为灰度BMP图%file是秘密消息文件%output是信息隐秘后生成图像%ste_cover是信息隐秘后图像矩阵%len_total是秘密消息的长度,即容量个人收集整理资料,仅供交流学习,勿作商业用途16/19function[st
本文标题:LSB信息隐藏实验报告
链接地址:https://www.777doc.com/doc-1787043 .html