LSB图像信息隐藏实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,任

相关文档
最新文档