信息隐藏 - 图文

更新时间:2023-11-05 12:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

LSB信息隐藏算法实现

一. LSB信息隐藏原理

LSB(least significant bit)算法是最早提出的一种典型的空间域信息隐藏算法。其信息嵌入过程是将待隐藏信息转化为二进制数据码流,然后将BMP文件图像数据部分的每个字节的奇偶性与上述二进制数码流进行比较。最后通过调整字节最低位的“0”或“1”,改变字节的奇偶性,使之与上述二进制数据流一致,即将信息嵌入到24位BMP图像中。

二、LSB信息隐藏与提取步骤

(1)、 LSB算法嵌入步骤

1、将原始载体图像的空域像素值由十进制转换到二进制表示 ,以大小的块图像为例 :

2、用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位,假设待嵌入的二进制秘密信息序列为[ 0 1 1 0 0 0 1 0 0 ],则替换过程如图所示。

第 1 页

3、将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像,如图所示。

(2)、 LSB算法提取步骤

1、 将得到的隐藏有秘密信息的十进制像素值转换为二进制数据,如图所示

2、将二进制数据的最低有效位提取出来,即为秘密信息序列[ 0 1 1 0 0 0 1 0 0 ]。如图所示。

第 2 页

三.源码说明

1、信息的嵌入代码 %嵌入秘密信息

Img = imread('C:\\Users\\郭栋\\Desktop\\image.jpg'); Double_img = double(Img);

fileId = fopen('C:\\Users\\郭栋\\Desktop\\test.txt','r'); [msg,len] = fread(fileId,'ubit1'); [m,n] = size(Double_img); flag = 1; for a = 1:n for b = 1:m

Double_img(a,b) = Double_img(a,b)-mod(Double_img(a,b),2) + msg(flag,1);

if flag ==len break; end

flag = flag + 1; end if flag ==len break; end end

第 3 页

Double_img = uint8(Double_img); imwrite(Double_img,'result.bmp'); subplot(1,2,1); imshow(Img); title('原图像'); subplot(1,2,2); imshow(Double_img); title('嵌入信息之后的图像'); 2、信息的隐藏提取过程 %提取秘密信息

img = imread('result.bmp'); img = double(img); [m,n] = size(img); xx =fopen('result.txt','a'); len = 160; p = 1; for a = 1:n for b = 1:m

if bitand(img(b,a),1)==1 fwrite(xx,1,'bit1'); result(p,1)=1; else

第 4 页

fwrite(xx,0,'bit1'); result(p,1)=0; end if p==len break; end p = p + 1; end if p == len break; end end fclose(xx);

四.实验结果分析

(1)、将原始图像和嵌入信息之后的图像进行对比:

(2)、test.txt记事本是需要隐藏得信息,result.txt记事本提取出来的信息,可以发现信息完

第 5 页

cda1 = cda0; for i = 1:k for j = 1:16

cda1(j + 30,i) = cda0(j + 30,i) + cdw0(j,i)*alpha; end end

(4)、 完成嵌入过程后进行逆DCT变换,显示原始图像和隐藏之后的图像 da1 = col2im(cda1,[8,8],[r,c],'distinct'); a1 = blkproc(da1,[8,8],'idct2'); figure(1);

subplot(1,2,1),imshow(a0,[]),title('原始图像'); subplot(1,2,2),imshow(a1,[]),title('隐藏之后的图像'); 2、 隐藏图像提取过程

(1)、对隐藏之后的图像进行DCT变换之后,反向实现隐藏图像的提取 dca0 = blkproc(a0,[8,8],'dct2'); dca1 = blkproc(a1,[8,8],'dct2'); cdca0 = im2col(dca0,[8,8],'distinct'); cdca1 = im2col(dca1,[8,8],'distinct'); for i = 1:k for j = 1:16

w1(j ,i) = (cdca1(j + 30,i) - cdca0(j + 30,i))/alpha; end end

w1 = reshape(w1,64,r1*c1/64); w = col2im(w1,[8,8],[r2,c2],'distinct'); w2 = blkproc(w,[8,8],'idct2');

(2)、显示隐藏图像和提取出来的隐藏图像 figure(2);

subplot(1,2,1),imshow(w0),title('隐藏图像'); subplot(1,2,2),imshow(w2),title('提取隐藏图像');

第 11 页

五.实验结果分析

(1)、将原始图像和有隐藏信息的图像进行对比:

原始图像 alpha=0.5时的图像

alpha=0.2时的图像 alpha=0.02时的图像

从上图的几幅图像当中alpha取值不同时藏有秘密信息的图像的不同效果,我们可以清楚的看出随着系数alpha值的增大,图像的破坏也越大,alpha=0.2或者alpha=0.5的情况下,还可以发现两者的图像相差基本不大,这就说明了,单纯的alpha对信息隐藏的不可见性的影响是有限的。主要是因为我们隐藏信息的数量是有限的,对图像的DCT系数改变的个数也是有限的,并且我们选的点是中频系数,并不包括主要的信息,所以对图像的能量能量的改变也是很有限的。

第 12 页

(2)、隐藏图像提取:

图像是分块以后进行的DCT变换,再经过随机选择后嵌入的秘密信息,在进行隐藏过程中由于部分隐藏位位0,所以有一部分隐藏图像不能提出出来,虽然进行不断的尝试,但是还是没能够解决。

五、小结

本实验基本对图像的隐藏与提取过程,但是没有成功实现对隐藏图像的完整提取。对于同一副图像来说,不同的嵌入强度alpha会使得图像的不可见性有明显的差异,并且alpha过大或者过小都会导致秘密信息无法提取出来;所以,在信息隐藏时要注意alpha的选取。在实验过程中实现了信息的提取,但是不能完全的提取,在图书馆以及网上查阅了很多资料,都没有找到一种好的解决方法,后来才知道没有量化,所以提取不全,由于时间原因以及自己能力有限,算法中还有一些不足。

第 13 页

第 14 页

本文来源:https://www.bwwdw.com/article/ph82.html

Top