LSB图像信息隐藏实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学号:姓名:专业年级班级:
实验室:组别:实验日期:
课程名称保密技术实验实验课时实验项目
名称和序号1.LSB图像信息隐藏实验
同组者
姓名
实验目的1. 掌握对图像的基本操作。
2. 能够用 LSB 算法对图像进行信息隐藏
3. 能够用 LSB 提取算法提取隐藏进图像的信息
4. 能够反映 jpeg 压缩率与误码率之间的关系
实验环境Windows+matlab
实验内容和原理1.用 MATLAB 函数实现 LSB 信息隐藏和提取2.分析了 LSB 算法的抗攻击能力
3.能随机选择嵌入位(考虑安全性因素)
实验步骤方法关键代码实验算法 1:LSB 嵌入
1.读取一副 256*256 大小的图片,判断是否为 RGB 图像。若为 RGB 图像,则读
取图像的一层信息(如 R 层)。
通过读取图像的尺寸大小来判断是否为RGB图像。RGB图像是三维多彩图,size有3个参数,最小参数是3,只要判断读取到的图像大小大于2,就确定读入的是RBG图像
2.以二进制形式读取要嵌入到图片里的消息。并读取消息的长度(嵌入消息的长度
不能超过图像位数)。
3.产生与消息长度一致的一串随机数(不能相同)。
自定义一个randinterval函数来实现伪随机数的生成
产生的伪随机数是代表消息要隐藏的像素位置(行和列的信息)
随机数代码:
function [row,col]=randinterval(matrix,count,key)
%randinterval.m
%参数说明
%matrix是载体矩阵,即要隐藏信息的图层
%cout为要嵌入信息的像素数量
%key为自定义秘钥,随机种子
[m,n] = size(matrix);
interval1 = floor(m * n/(count+eps)) + 1;
interval2 = interval1 - 2;
if interval2 == 0
error('载体太小不能把秘密信息隐藏进去');
end
rand('seed',key);
a = rand(1, count);
row = zeros([1 count]);
col = zeros([1 count]);
r = 1;
c = 1;
row(1,1) = r;
col(1,1) = c;
for i =2:count
if a(i) >= 0.5
c = c + interval1;
else
c = c + interval2;
end
if c > n
r = r + 1;
if r > m
error('载体太小不能把秘密信息隐藏进去');
end
c = mod(c, n);
if c == 0
c = 1;
end
end
row(1, i) = r;
col(1, i) = c;
end
4.按照产生的随机数的序列依次将图片层的最后一位改为消息的信息。即用消息替
换图片的最后一位信息。
5.嵌入完成后,如果为 RGB 则将该层返回原图像。然后将数据信息写回图像。 LSB
就完成了。
image=imread('1.jpg');
Hide_image=image;
Hide_image=double(Hide_image);
mysize=size(image);
if numel(mysize)>2
['the photo is a rgb style photo'] %是rgb图像输出到命令行窗口
image1=Hide_image(:,:,1); %第三个参数 1代表的读取的是红层,但是没有将2,3层设为0,因为会叠加,所以显示出来的第一层图像还是灰色的
message=fopen('Message.txt','r');
[msg,msg_len]=fread(message,'ubit1') %按位以二进制形式读取文本内容与长度[m,n]=size(image1) %读取行和列
p=1; %p为秘密信息的位计数器
[row,col]=randinterval(image1,msg_len,1996);
for i=1:msg_len
image1(row(i),col(i))=image1(row(i),col(i))-mod(image1(row(i),col(i)),2)+msg( p,1);
if p==msg_len
break;
end ;
p=p+1;
end
%还原图像
Hide_image(:,:,1)=image1;
Hide_image=uint8(Hide_image);
imwrite(Hide_image,'Hide_image.tif');
%输出隐藏信息的图像
subplot(121);imshow(image);title('未嵌入信息的图片');
subplot(122);imshow(Hide_image);title('嵌入信息的图片');
else ['the photo is not a rgb style']
fclose('all');
end
实验算法 2:读取 LSB 隐藏的信息
1.读取已经隐藏信息的图像。如果为 RGB 图像,则读取图像的一层(该层为嵌入信息的那层)。
2.用与 LSB 算法中相同的随机数种子产生相同的一串随机数。随机数串的长度由LSB 中获得(长度不得大于图像大小)。
用同一个伪随机生成算法,相同的种子,来产生像素点位置,可以确保隐藏时和提取时位置顺序是一模一样的,在顺序读取这些位置上的数据(利用与运算,与上1,任