利索能及
我要发布
收藏
专利号: 2016110267287
申请人: 南京邮电大学
专利类型:发明专利
专利状态:已下证
更新日期:2025-04-10
缴费截止日期: 暂无
联系人

摘要:

权利要求书:

1.一种基于SVD的信息隐藏方法,其特征在于:包括以下步骤:步骤1,预处理步骤:首先,加载秘密信息,计算出经过预处理后的信息量;然后,加载载体图像,计算出载体图像能够容纳的信息量;其次,对加密信息进行压缩处理;最后,用户输入密钥,并使用Arnold变换对隐藏信息进行加密处理;

步骤2,加密步骤:首先,选择待传输的原始载体图像,将秘密信息的描述信息存储在载体图像的开头;若嵌入量满足条件,则对载体图像分块进行DCT变换,获取DCT系数矩阵;然后,对选中的DCT系数矩阵进行SVD分解,获取最佳的信息隐藏位置;最后,采用F5隐写算法将秘密信息嵌入到最佳隐藏位置;

步骤3,解密步骤:提取秘密信息的描述信息;对加密后图像进行DCT变换;每个DCT系数矩阵进行SVD分解,获取秘密信息隐藏位置;使用F5隐写算法提取出秘密信息;用户输入密钥并对提取后的秘密信息进行Arnold反变换解密;解压秘密信息数据获得秘密信息原始数据。

2.根据权利要求1所述的基于SVD的信息隐藏方法,其特征在于:所述步骤1的具体步骤为:步骤1.1,加载秘密信息A,计算出经过预处理后的信息量

加载秘密信息A,并由公式 计算出该秘密信息经过预处理

后的信息量;上式中,A.length表示隐藏信息A的大小;并将秘密信息表示成矩阵的形式;

步骤1.2,加载载体图像I,计算出载体图像能够容纳的信息量加载载体图像I,并由公式 计算出该载体图像I能够容纳的最大信息量,上式中,I.width表示I图像的宽度,I.height表示I图像的高度;若步骤1.1中计算出该秘密信息经过预处理后的信息量超过上述步骤计算出的计算出该载体图像I能够容纳的最大信息量,则需要对隐藏信息A进行裁剪;

步骤1.3,对加密信息进行压缩处理

对秘密信息A进行压缩,利用公式A=k*B+C实现秘密信息的压缩,其中矩阵C中的数据都等于矩阵A中元素的平均值,则k*B=A-C,若A-C中所有元素的绝对值都不大于127,则k=

1,否则k=2;由于A中的元素最多由8bit表示,由此可得矩阵C的元素最多由8bit表示,且矩阵A中的元素都是非负整数,故k的最大值为2;将k和矩阵C中的元素cij存储到描述信息中,待与秘密信息的长度和高度一起嵌入到载体信息的开头;经过预处理的信息B以绝对值的形式存储,并将负数的位置信息存放在数组f中作为密钥的形式传输给接收者;

步骤1.4,用户输入密钥,并使用Arnold变换对隐藏信息进行加密处理Arnold变换用公式表示如下:

其中x,y的取值为{0,1,2,…,N-1},N为数字信息矩阵的阶数;

用户输入3个密钥的数值,key_x,key_y,和len,均为正整数,对秘密信息A根据用户输入的密钥选取加密区域,区域选中后,采用公式x’=x+y,y’=x+2*y,然后x’、y’分别对选中区域的宽度和高度len进行取余运算:x’=x’mod len;y’=y’mod len;然后将原来的x,y坐标的数据搬移到新的x’,y’处;重复该过程t次,变换完成。

3.根据权利要求2所述的基于SVD的信息隐藏方法,其特征在于:步骤1.3中,设将秘密信息表示为m×n的矩阵A,A.length表示秘密信息的大小,在不影响秘密信息的情况下,将其压缩;

故将矩阵A分解成如下形式:

A=k*B+C

其中B,C为m×n矩阵;

aij:表示A中元素,bij:表示B中元素,cij:表示C中元素

假设矩阵A中最大值max=Max(aij),最小值min=Min(aij),

若k=1,则B=A-C;

若k=n,则n*B=A-C,需要保证B中元素都为整数,

bij=Math.round((aij-cij)/n),其中0≤i

最后获得矩阵B,并将k,cij存入秘密信息的描述信息中,记录矩阵B的负数位置存入数组f中,将其作为密钥传输,故矩阵B中存储数据的绝对值形式,矩阵B就是预处理后的秘密信息。

4.根据权利要求1所述的基于SVD分解技术的信息隐藏方法,其特征在于:所述步骤2的具体步骤为:步骤2.1:将秘密信息的描述信息存储在载体图像的开头

选取载体图像的前3个像素存储隐藏信息A的高度数值,每个像素只使用B、R通道,并且使用每个字节的末尾2bit作为存储位置,一共可以存12bit的高度值;然后按照隐藏秘密信息A的高度值的方法选取中间3个像素存储秘密信息A的宽度值;最后3个像素用于存储k和cij的值;直接替换掉这些像素的最末2bit位数值即可;

步骤2.2:对载体信息I进行DCT变换

将加载的载体图像进行分块,将其分为8×8的数据块,对每个矩阵块进行DCT变换,并获得DCT系数矩阵iij;

步骤2.3:查找最佳信息嵌入位置

对DCT系数矩阵iij进行SVD分解,利用公式iij=UΣVT,其中矩阵U为左奇异值矩阵;V为右奇异值矩阵;Σ为对角矩阵,其对角线上的值越小,其对应的特征向量对该iij矩阵影响越ni小,故选取Σ矩阵对角线上最小的6个数据,并对其各个数据进行10 倍放大,保证数据的小数点前有7位有效数字,对其取最末2bit作为载体信息,故共计12bit载体信息;

步骤2.4:将变换后的秘密信息使用F5算法嵌入到载体图像中对每个DCT系数矩阵,有12bit载体信息,故将其分为3组,每组3bit;而采用F5算法以dmax=1,矩阵编码方式为(1,3,2);故12bit的载体信息可嵌入8bit秘密信息,随后对DCT系数矩阵进行IDCT变换;以此类推,直至将秘密信息的所有字节全部放入载体图像中,这样就生成加密后图像I’。

5.根据权利要求4所述的基于SVD的信息隐藏方法,其特征在于:所述步骤2的具体步骤为:步骤2.2中,假设矩阵A的大小为M*N,其变换公式如下:

其中:

Bp,q称为矩阵A的DCT系数。

6.根据权利要求4所述的基于SVD的信息隐藏方法,其特征在于:所述步骤2.4和2.4的具体实现方法如下:设待隐藏JPEG图像RGB分量中分量B某分块DCT系数量化后的8*8数据矩阵为H(i,j),隐藏信息M=10101011,矩阵H如下所示:

将矩阵H进行SVD分解:

H=UΣVT

其中Σ矩阵如下:

令a={a1,a2,a3,a4,a5,a6},其中a1=1.230363e-09,……,a6=4.006524e-27,由于Σ矩阵对角线上的后6个数据都很小,并且为了隐藏信息对于载体图像的影响,最如下操作:设b={b1,b2,b3,b4,b5,b6}为a中数据放大后的数据(保留7位有效数字),c={c1,c2,c3,c4},函数int geta(double a)功能描述:例如double t=1.23945e-N,N=geta(t);

Int di=gete(ai)+6;

Int bi=ai*10^di;

获取bi的后2位,组成12bit,并将其每3bit分为一组存入数组c中,然后采用F5算法进行信息隐藏,采用3位来表示2bit信息,即n=3,k=2;

k

F5算法实现矩阵编码时,取dmax=1,矩阵编码方式为(1,n,k),码字长度为n=2-1,表示对于最多只需改变一个位;因此对于本发明中,每个ci中可嵌入2bit信息,故数组c一共可嵌入2*4=8bit信息,即一个字节的信息;

根据矩阵Σ可得b={1230363,7978658,7213485,49646493,2142188,4006524},因此数组c={111,001,010,000}(以二进制形式表示)将秘密信息M=10101011嵌入其中,以第一组为例:

t1t2t3=111,m1m2=10

t1⊕t3=1⊕1=0,则m1≠t1⊕t3,改变t1=0t2⊕t3=1⊕1=0,则m2=t2⊕t3

因此第一组嵌入秘密信息后,载体信息变为t1t2t3=011其他组以此类推,嵌入原理相同;故,隐藏信息M后,数组c={011,011,110,001}综上所述,每个DCT系数矩阵可嵌入1byte信息,因此按照上述算法将秘密信息逐个字节嵌入到相应载体矩阵中,如此循环,直至结束。

7.根据权利要求1所述的基于SVD的信息隐藏方法,其特征在于:所述步骤3的具体步骤为:步骤3.1:提取秘密信息的描述信息

加密后图像I’的前9个像素数据,其中,根据加密原理,前3个像素中隐藏的是秘密信息的高度数据,中间3个像素中隐藏的是秘密信息的宽度数据,最后3个像素中的为k,cij;每个像素按照顺序直接提取其中每个字节的最末2bit,然后拼接在一起形成34bit,再进一步分为12bit,12bit,2bit,8bit;前一个12bit的数值,该数值就是隐藏信息的高度数值,随后一个12bit的数值就是隐藏信息的宽度,随后2bit表示k,最后8bit就是cij的值;

步骤3.2:对加密后图像I’进行DCT变换

对于加载的图像I’,对图像I’分块为8×8矩阵,将该矩阵DCT变换形成新的DCT系数矩阵;

步骤3.3:每个DCT系数矩阵进行SVD分解,获取秘密信息隐藏位置对每个DCT系数矩阵进行SVD分解,获取U、Σ、V三个矩阵,其中Σ为对角矩阵,取出其对角线上最小的6位数据,分别对其放大10ni倍,知道其小数点前有7位有效数字,其每个数字的最末2bit为隐藏秘密信息的载体,共12bit,按照顺序将其拼接为4组,每组3bit;

步骤3.4:使用F5算法提取出秘密信息

每3bit信息(a1a2a3)中隐藏了2bit信息(b1b2):其提取公式:b1=a1⊕a3,b2=a2⊕a3;因此每个DCT系数矩阵可提取出8bit秘密信息;以此类推,提取完隐藏信息,最终生成经过预处理后的秘密信息;

步骤3.5:用户输入密钥并对提取后的秘密信息进行Arnold反变换解密用户输入3个密钥key_x,key_y,len,获取加密区域,根据公式x=2*x’-y’,y=y’-x’进行Arnold反变换解密;然后x,y分别对该加密区域的宽度和高度len进行取余运算:x=x mod len;y=y mod len;如果x<0则x=x+len,如果y<0则y=y+len;重复该过程t次,这样就恢复了压缩后的秘密信息的数据B;

步骤3.6:解压秘密信息数据获得秘密信息原始数据A

取出秘密信息的描述信息中的k和cij,以及作为密钥传输的数组f,所以矩阵C的元素就是cij,根据公式:A=k*B+C;获得秘密信息的原始数据A。