基于LSB的数字水印算法及MATLAB实现加密算法宗岳,王恺山东科技大学山东,中国ggxxsol@163.com摘要—LSB是一种简单传统的信息隐藏算法,属于数字水印技术中的一种。本文首先介绍了LSB技术的原理和特点,然后讨论了基于LSB的数字水印算法。最后利用MATLAB2010b2对这一算法的加密过程进行了仿真。关键词:LSB数字水印信息隐藏MATLABI.介绍随着计算机应用逐渐广泛、网络技术的迅速发展,使音频、视频等多媒体信息都能以数字形式传输和播放,从而使大规模非授权拷贝成为了可能,而这样会损害音乐、电影、书籍和软件等出版业的发展,为了保护知识产权引发了一个很有意义的研究方向:信息隐藏。本文首先介绍了了数字水印技术的原理和分类,接着对LSB算法原理及LSB算法实现进行了介绍,最后使用MATLAB对其加密过程进行了仿真。II.数字水印技术的基本原理数字水印的主要目的是将特定的信息加入到需要保护的媒体信息中,加入的信息一般是能够代表媒体信息版权的内容,如公司标志、媒体作者、特定代码等,而且要保证数字水印能够抵抗一定的攻击,而不被轻易的破坏和修改,同时数字水印要能够被提取或者能够被检测到。数字水印的具体内容、算法、提取或检测过程根据实际应用有不同的要求。数字水印的嵌入和提取过程如图1,图2所示。图1数字水印的嵌入过程图2数字水印的提取过程图1是数字水印的嵌入过程,加入密钥可以提高数字水印的隐蔽性、抗攻击性,而并非是必须的。根据用途不同,,嵌入的水印有些是需要还原的,而有些则只需验证水印的存在性,前者需要数字水印的提取算法,而图2需要数字水印的检测算法,根据具体的水印算法,嵌入或提取的过程可能有所不同。III.数字水印的分类数字水印技术可以从不同的角度进行分类,因此有多种分类方法。按数字水印的特性可分为鲁捧数字水印和脆弱数字水印。鲁棒数字水印主要用于标识数字媒体信息的版权信息,它要求嵌入的水印能够抵抗对媒体的常规编辑和恶意攻击,在对媒体进行如:裁剪、旋转、缩放、压缩的变换后水印信息不受到较大损害。而脆弱水印相反,它对攻击敏感,可以根据脆弱水印的状态判断原始信息是否被修改过。按数字水印所附载的媒体可分为图像水印、音频水印、视频水印和文本水印等。每一种数字化的媒体都有相应的水印算法,这也造成了数字水印算法的复杂性。按数字水印隐藏的位置划分可以分为空(时)域数字水印、频域数字水印、时/频域数字水印和时间/度数字水印。原始信息通常在空域或者时域上表示,根据信号处理理论有多种变换将信号变化到另外的域上,每一种域上水印信息密钥载体图片水印图片加密算法水印图片密钥水印信息解密算法都可以嵌入数字水印,也就产生了相应的数字水印算法。·按数字水印的可见性可以分为可见数字水印和非可见数字水印。可见数字水印通常是将公司表示叠加到原始图像上,算法比较简单,也有相应的应用软件,如UndreamtMarkingTechnologies公司的PhotoWatermark。而不可见数字水印要求嵌入的水印是不能被人的视觉系统感知的,其算法相对复杂。关于数字水印算法的分类还有很多不同的分类方法,比如按用途划分,按检测过程划分等,限于篇幅,本文仅介绍了较为常见的几种分类。IV.基于LSB的数字水印算法LSB是LeastSingificantBit的缩写,意思是最不重要比特位。LSB数字水印算法按照上文介绍的四种数字水印分类方法分别属于:鲁棒性数字水印、图像数字水印、空域数字水印、不可见数字水印。LSB算法利用了数字图像处理中位平面的原理,即改变图像的最低位的信息,对图像信息产生的影响非常小人眼的视觉感知系统往往不能察觉。以一幅256灰度的图像为例,256灰度共需要8个位来表示,但其中每一个位的作用是不一样的,越高位对影像的影响越大,反之越低的位影响越小,甚至不能感知。V.LSB算法的实现LSB算法实现较为简单,首先,需要考虑嵌入的数字水印的数据量,如果嵌入最低的1位,则可以嵌入的信息量是原始图像信息量的1/8,如果适用最低两位则可以嵌入的信息量是1/4。但是嵌入的数字水印的信息量越大,同时对图像的视觉效果影响也越大。在这里要嵌入一个二值的图像。然后,适当调整数字水印图像的大小和比特位数,以适应数字水印图像数据量的要求。最后,对原始图像中要使用的最低位置0,再将数字水印数据放人原始图像的最低位即可。下面通过MATLAB2010b2实现这一算法这里选用一幅300×400像素,256灰度的图像,数字水印用“山东科技大学”的字样的二值图像。置0的方法是调用模2函数mod(a,2),将得到的数值与原水印相减,从而得到最低位为0的图片。(使用两位最低有效位的话则用模4函数mod(a,4)然后相减)。因为这里加入了噪声干扰,所以对水印和原始图片进行了重编码,首先将原图片扩大两倍,并且使用两位最低有效位然后图片相加得到加入水印的图像。然后对图片加入噪声得到输出图像。程序如下:clearallcloseall%=========================%readimage%=========================mat=imread('1.jpg');mbt=imread('2.bmp');imgread=rgb2gray(mat);mbt=uint8(mbt);[maa,mab]=size(imgread);%========================%progresstheimage%========================fori=1:1:maaforj=1:1:mabimgread(i,j)=imgread(i,j)-mod(imgread(i,j),4);endend%========================%Enlargetheimage%=======================forj=1:1:mabfori=1:1:maama(2*i-1,2*j-1)=imgread(i,j);ma(2*i,2*j-1)=imgread(i,j);ma(2*i-1,2*j)=imgread(i,j);ma(2*i,2*j)=imgread(i,j);mb(2*i-1,2*j-1)=mbt(i,j);mb(2*i,2*j-1)=mbt(i,j);得到的图形如下所示:图3原始图片图4水印图片图5加入水印后的图片LSB算法简单,实现容易,同时可以保证数字水印的不可见性,由于可以在最低位的每个像素上都插人数字水印信息,因此有较大的信息嵌入量。LSB算法一般嵌入图像的最低一位或者两位,如果嵌入的位数太多,则会被人眼察觉到。但是由于数字水印位于图像的不重要像素位上,因此很容易被图像过滤、量化和几何型变等操作破坏,以致无法恢复数字水印。针对基本的LSB算法的缺点,一些研究者也提出了一些改进的算法,如奇偶标识位隐藏算法、索引数据链隐藏算法等,这些算法能增强数字水印的隐蔽性。VI.结束语数字水印技术是近年来兴起的一门较前沿的技术,还处在发展阶段,没有统一的国际标准,缺乏完善的软件系统。但是数字水印技术作为信息加密技术的分支,在知识产权的保护方面有着广泛的应用前景。LSB数字水印算法作为最早提出的数字水印算法,特点是原理简单,实现容易,掌握这以算法对于深入研究学习数字水印技术很有必要。ma(2*i,2*j)=imgread(i,j);mb(2*i-1,2*j-1)=mbt(i,j);mb(2*i,2*j-1)=mbt(i,j);mb(2*i-1,2*j)=mbt(i,j);mb(2*i,2*j)=mbt(i,j);endendma=ma+mb*3;%=======================%attack%=======================noise=normrnd(0,0.3,2*maa,2*mab);ma=double(ma);ma=ma+noise;ma=uint8(ma);figure(1);subplot(2,2,1);imshow(imgread);subplot(2,2,2);imshow(mbt,[0,1]);subplot(2,2,3);imshow(ma);附带全部代码:clearallcloseall%=========================%readimage%=========================mat=imread('1.jpg');mbt=imread('2.bmp');imgread=rgb2gray(mat);mbt=uint8(mbt);[maa,mab]=size(imgread);%[mba,mbb]=size(mbt);md=ones(maa,mab);ma=zeros(2*maa,2*mab);ma=im2uint8(ma);%========================%progresstheimage%========================fori=1:1:maaforj=1:1:mabimgread(i,j)=imgread(i,j)-mod(imgread(i,j),4);endend%========================%enlargeimage%=======================forj=1:1:mabfori=1:1:maama(2*i-1,2*j-1)=imgread(i,j);ma(2*i,2*j-1)=imgread(i,j);ma(2*i-1,2*j)=imgread(i,j);ma(2*i,2*j)=imgread(i,j);mb(2*i-1,2*j-1)=mbt(i,j);mb(2*i,2*j-1)=mbt(i,j);mb(2*i-1,2*j)=mbt(i,j);mb(2*i,2*j)=mbt(i,j);endendma=ma+mb*3;%=======================%attack%=======================noise=normrnd(0,0.2,2*maa,2*mab);%Gaussian,uniform,%laplace,salt-pepperma=double(ma);ma=ma+noise;ma=uint8(ma);figure(1);subplot(2,2,1);imshow(imgread);subplot(2,2,2);imshow(mbt,[0,1]);subplot(2,2,3);imshow(ma);%subplot(2,2,1);imshow(mb,[0,1]);subplot(2,2,2);imshow(ma);subplot(2,2,3);imshow(mc);%=======================%watermarkextraction%=======================fori=1:1:maaforj=1:1:maba=mod(ma(2*i-1,2*j-1),2)+mod(ma(2*i,2*j-1),2)+mod(ma(2*i-1,2*j),2)+mod(ma(2*i,2*j),2);a=(-a+mod(ma(2*i-1,2*j-1),4)+mod(ma(2*i,2*j-1),4)+mod(ma(2*i-1,2*j),4)+mod(ma(2*i,2*j),4))/2;ifa4md(i,j)=0;endendendmd=uint8(md);figure(2);imshow(md,[0,1]);