信息化技术高度进步的今天,传统的安全技术已显得捉襟见肘,而信息隐藏技术作为一门新兴的技术,因其安全性程度高而显示了广阔的应用前景。基于信息隐藏算法并结合密码技术设计并实现了一个可行的信息隐藏系统,基本实现了隐藏信息的嵌入和提取,平均相似度达到91. 42%;在隐藏信息嵌入前,对隐藏信息进行加密,在接收端加入解密程序,从源头上消除了隐藏信息在传输过程中被恶意破解的隐患。保证了隐藏信息的安全性,从而也保证了载体信息的安全性。

一、DES算法

DES算法又称为美国数据加密标准。DES算法把64位的明文经过一系列的变换转为64位的密文输出,其密钥也是64位,其算法主要分为两步:

(1)初始置换其功能是把初始置换后把64位明文平均分成左右两部分(L,R),每部分各为32位,其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,输出LO、RO两部分。

(2)逆置换将L16、R16作为输入部分,进行逆置换,得到密文并输出。

二、基于DCT系数的加密信息隐藏算法

本文在隐藏之前先对图像进行离散余弦变化,得到DCT系数,然后将隐藏信息经过DES算法加密,将密文信息嵌入到DCT系数的最高位,在保持LSB方法的优点的同时,进一步提高算法的抗干扰性。其具体过程如下:

(1)读人待隐藏信息并将其转化为ASCII码形式存储;

(2)将待隐藏信息的ASCII码进行加密处理得到密文(假设为N位);

(3)获取原始图像的RGB值;

(4)对图像进行离散余弦变化,得到DCT系数;

1

(5)按照公式w=W'/(1+a Xx)将信息嵌入到待隐藏图像中,其中w'为隐藏后图像的DCT系数,w为待隐藏图像的DCT系数,a为嵌入参数,x则为隐藏信息;

(6)将得到的DCT系数进行逆DCT变换,得到隐藏信息后的图像,即完成信息隐藏。逆DCT变换公式为:

1

三、DES加密算法核心编程

public 8tatic byte[ l decryptMode( byte[ j keybyte, byte[ ] src)

SecretKey Skey - new SecretKeySpec( keybyte, Alg) ;

Cipher cl= Cipher, t;etlnstance( AIS) ;

cl , init( Cipher. DECRYPT_MODE , deskey)

retum cl. doFirud ( src ) ;

catch (java. security. NoSuchAlgorithmException el

el. pnntStackTrace( ) ;

catch (javax. crypto. NoSuchPaddingException e2)

e2. printStackTrace( ) ;

catch (java. lang. Exception c3)

e3. printStackTrace( )i ;

retum null;

public static String byte2hex( byte[ ] a)

String hh = i' " ,

String stp = " " ;

for (.int n = O;n< a. length;n ++ )

atm p = (java. lang. Integer. toHexString( a[ n] & OXFF));

if ( stmp. length( ) ==1)

hh = hh + "0" + stp;

else hh = hh + stp;

if ( n< a. length - l) hh = hh + ii : il ';.

retum hh. toUpperCase( ) ; .

public static void main( String[ ] args)

Security. addProvider( new conL sun. crypto. provider. SunjCE( ));

final byte[ J keyBytes = /Oxll, Ox22, Ox4F, Ox58, (byte)

Ox88, Oxl0, Ox40, Ox38, Ox28 , Ox25 , Ox79, Ox51, ( byte)

OxCB , ( byte)OxDD, Ox55, Ox66, Ox77 , Ox29 , Ox74 , ( byte )

Ox98, Ox30, Ox40, Ox36, ( byie)OxE24 t //24字节的密钥

String szSrc = " DES encryption!",,

String szSrc=”DES encryption!"

System. out. println(”加密前的字符串i”+szSrc);

byte[]encoded - encryptMode( keyBytes, szSrc. getByLes(l));

SyBtem. out. pnntln(”加密后的字符串:”new String( encoded));

byte[]srcBytes芎decryptMode( keyBytes. encoded);

System out. pnntln(”解密后的字符串:”(new Stnng(srcBytes)));

四、系统实验与分析

本文所开发的系统,经过多次测试,均达到了预期效果。下面仅以图2的图像文件为例说明其实验效果,嵌入隐藏信息图像和原始图像的相似度达到了90.13%。由图3可见,人类的视觉系统很难感知出隐藏前、后的图像间的差异。

1

为了进一步体现实验的效果,本文对隐藏信息前、后的图像特征的以下几个最重要的性能指标进行比对试验;

(1)峰值信噪比PSNR

常用来衡量嵌入隐藏信息后图像的质量。PSNR越大,说明伪装图像的失真度越低,两幅图像越接近口PSNR定义如下:

1

其中f(i,j)是原来的待嵌入隐藏信息图像,f’(i,j)是嵌入信息后的图像,M,N是图像的尺寸。

(2)均方根误差RMSE

它较好地反映了嵌入隐藏信息前后两图像的误差。RMSE越小,表明两幅图像越相似,RMSE定义如下:

1

实验中以不同的图像作为待嵌入隐藏信息图像,实验结果如表1所示。

1

(3)图像特征相对误差

众所周知,像素灰度是图像各离散点量测幅度的样本值,是最原始、最基本的特征数据。均值表示图像包含的平均能量,标准差表示像素灰度分布的分散程度,该值越小说明像素灰度分布越集中,越大说明像素灰度越分散。

实验结果如表2所示。

1

表1为抽样12幅图像,从表1可以看出,PSNR值均超过了35db,平均值达到了68.54db。主观感觉不易找到两者之间的差异,且RMSE的均值也只有0.0997,说明本文的隐藏算法具有良好的隐秘性。表2为图像信息隐藏前、后图像特征相对误差。从表2可以看出,该隐藏算法对图像的视觉效果的改变是可以忽略的,这就更好地验证了该算法的有效性。

小知识之DCT变换

DCT变换的全称是离散余弦变换(Discrete Cosine Transform),是指将一组光强数据转换成频率数据,以便得知强度变化的情形。