您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > 实验三-基于LSB的信息隐藏算法
实验三基于LSB的信息隐藏算法一、实验目的该实验为验证性实验。目的是通过实验使学生掌握经典信息隐藏算法,在Matlab环境下,编写基于图像的LSB信息隐藏算法程序。用Matlab函数实现LSB信息隐藏及提取,并进行分析。二、实验要求1、实验前要做好充分准备,包括:复习实验所涉及的知识点,掌握Matlab编程语言和调试环境。2、实验时注意记录实验过程中产生的数据、出现的问题及解决问题的方法。3、理论联系实际,认真分析实验结果,回答思考题。4、实验后完成实验报告,并附相关截图。三、实验环境计算机(安装VisualC++6.0和Matlab6.5以上版本)四、实验原理隐秘算法核心是将我们选取的像素点的最不重要位依次替换成秘密信息,以达到信息隐秘的目的。嵌入过程包括选择一个图像载体像素点的子集{j1,…,jl(m)},然后在子集上执行替换操作像素cji←→mi,即把cji的LSB与秘密信息mi进行交换(mi可以是1或0)。一个替换系统也可以修改载体图像像素点的多个比特,例如,在一个载体元素的两个最低比特位隐藏两比特、三比特信息,可以使得信息嵌入量大大增加但同时将破坏载体图像的质量。在提取过程中,找出被选择载体图像的像素序列,将LSB(最不重要位)排列起来重构秘密信息,算法描述如下:嵌入过程:for(i=1;i=像素序列个数;i++)si←cifor(i=1;i=秘密消息长度;i++)//将选取的像素点的最不重要位依次替换成秘密信息sji←cji←→mi提取过程:for(i=1;i=秘密消息长度;i++){i←→ji//序选取mi←LSB(cji)}五、实验内容与步骤1、随机选取图像载体像素,实现隐秘消息的嵌入与提取(1)隐秘消息的嵌入%文件名:randlsbhide.m%函数功能:本函数将完成随机选择LSB的信息隐秘,载体选用灰度BMP图%输入格式举例:[ste_cover,len_total]=randlsbhide(′glenna.bmp′,′message.txt′,′scover.bmp′,2001)%参数说明:%input是信息隐蔽载体图像%file是秘密消息文件%output是信息隐秘后的生成图像%key是随机间隔函数的密钥function[ste_cover,len_total]=randlsbhide(input,file,output,key)%读入图像矩阵cover=imread('lena.bmp');ste_cover=cover;ste_cover=double(ste_cover);%将文本文件转换为二进制序列f_id=fopen('1.txt','r');[msg,len_total]=fread(f_id,'ubit1');%判断嵌入消息量是否过大[m,n]=size(ste_cover);iflen_totalm*nerror('嵌入消息量过大,请更换图像');end%p作为消息嵌入位数计数p=1;%调用随机间隔函数选取像素点[row,col]=randinterval(ste_cover,len_total,2001);%在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);ifp==len_totalbreak;endp=p+1;endste_cover=uint8(ste_cover);imwrite(ste_cover,'lena2.bmp');%显示实验结果subplot(1,2,1);imshow(cover);title('原始图像');subplot(1,2,2);imshow('lena2.bmp');title('隐藏信息的图像');(2)编写函数比较两幅图像区别%文件名:compare.m%函数功能:本函数完成显示隐秘前后两幅图像的区别%输入格式举例:F=compare(′blenna.bmp′,′scover.bmp′)%参数说明:%original是原始载体图像%hided是隐秘后的图像%F是差值矩阵functionF=compare(original,hided)%读取原始载体图像矩阵W=imread('lena.bmp');W=double(W)/255;%读取隐秘后图像矩阵E=imread('lena2.bmp');E=double(E)/255;%将两图像矩阵相减,显示效果F=E-W;%注意,MATLAB中矩阵相减只支持double型imshow(mat2gray(F))(3)隐秘消息的提取%文件名:randlsbget.m%函数功能:本函数将完成提取隐秘于LSB上的秘密消息%输入格式举例:result=randlsbget(′scover.jpg′,56,′secret.txt′,2001)%参数说明:%output是信息隐秘后的图像%len_total是秘密消息的长度%goalfile是提取出的秘密消息文件%key是随机间隔函数的密钥%result是提取的消息functionresult=randlsbget(output,len_total,goalfile,key)ste_cover=imread('lena2.bmp');ste_cover=double(ste_cover);%判断嵌入消息量是否过大[m,n]=size(ste_cover);frr=fopen('2.txt','a');%p作为消息嵌入位数计数器,将消息序列写回文本文件p=1;%调用随机间隔函数选取像素点[row,col]=randinterval(ste_cover,128,2001);fori=1:128ifbitand(ste_cover(row(i),col(i)),1)==1fwrite(frr,1,'bit1');result(p,1)=1;elsefwrite(frr,0,'bit1');result(p,1)=0;endifp==128break;endp=p+1;endfclose(frr);2、顺序选取图像载体像素,实现隐秘消息的嵌入与提取(1)隐秘消息的嵌入%文件名:lsbhide.m%函数功能:本函数将完成在LSB上的顺序信息隐秘,载体选用灰度BMP图%输入格式举例:[ste_cover,len_total]=lsbhide(′glenna.bmp′,′message.txt′,′scover.bmp′)%参数说明:%input是信息隐蔽载体图像,为灰度BMP图%file是秘密消息文件%output是信息隐秘后生成图像%ste_cover是信息隐秘后图像矩阵%len_total是秘密消息的长度,即容量function[ste_cover,len_total]=lsbhide(input,file,output,key)%读入图像矩阵cover=imread('lena.bmp');ste_cover=cover;ste_cover=double(ste_cover);%将文本文件转换为二进制序列f_id=fopen('1.txt','r');[msg,len_total]=fread(f_id,'ubit1');%判断嵌入消息量是否过大[m,n]=size(ste_cover);iflen_totalm*nerror('嵌入消息量过大,请更换图像');end%p作为消息嵌入位数计数p=1;%调用随机间隔函数选取像素点%[row,col]=interval(ste_cover,len_total,2001);%在LSB隐秘消息forf1=1:mforf2=1:nste_cover(f1,f2)=ste_cover(f1,f2)-mod(ste_cover(f1,f2),2)+msg(p,1);ifp==len_totalbreak;endp=p+1;endifp==len_totalbreak;endp=p+1;endste_cover=uint8(ste_cover);imwrite(ste_cover,'lena2.bmp');%显示实验结果subplot(1,2,1);imshow(cover);title('原始图像');subplot(1,2,2);imshow('lena2.bmp');title('隐藏信息的图像');(2)调用函数compare.m比较两幅图像区别%文件名:compare.m%函数功能:本函数完成显示隐秘前后两幅图像的区别%输入格式举例:F=compare(′blenna.bmp′,′scover.bmp′)%参数说明:%original是原始载体图像%hided是隐秘后的图像%F是差值矩阵functionF=compare(original,hided)%读取原始载体图像矩阵W=imread('lena.bmp');W=double(W)/255;%读取隐秘后图像矩阵E=imread('lena2.bmp');E=double(E)/255;%将两图像矩阵相减,显示效果F=E-W;%注意,MATLAB中矩阵相减只支持double型imshow(mat2gray(F))(3)隐秘消息的提取%文件名:lsbget.m%函数功能:本函数将完成提取隐秘于LSB上的秘密消息%输入格式举例:result=lsbget(′scover.bmp′,56,′secret.txt′)%参数说明:%output是信息隐秘后的图像%len_total是秘密消息的长度%goalfile是提取出的秘密消息文件%result是提取的消息functionresult=lsbget(output,len_total,goalfile,key)ste_cover=imread('lena2.bmp');ste_cover=double(ste_cover);%判断嵌入消息量是否过大[m,n]=size(ste_cover);frr=fopen('2.txt','a');%p作为消息嵌入位数计数器,将消息序列写回文本文件p=1;%调用随机间隔函数选取像素点[row,col]=interval(ste_cover,128,2001);forf1=1:128forf2=1:128ifbitand(ste_cover(f1,f2),1)==1fwrite(frr,1,'bit1');result(p,1)=1;elsefwrite(frr,0,'bit1');result(p,1)=0;endifp==128break;endp=p+1;endifp==128break;endp=p+1;endfclose(frr);实验小结:通过实验使我们掌握经典信息隐藏算法,在Matlab环境下,编写基于图像的LSB信息隐藏算法程序。用Matlab函数实现LSB信息隐藏及提取,并进行分析,对顺序嵌入隐秘消息和随机嵌入隐秘消息两种方法的实现结果进行比较。通过比较可得,顺序嵌入隐秘消息比随机嵌入隐秘消息更有序,代码更复杂,要求更严格,同时隐秘性也更好。
本文标题:实验三-基于LSB的信息隐藏算法
链接地址:https://www.777doc.com/doc-1787082 .html