发明内容
本发明实施例提供了一种基于编码的图像加密隐藏信息的方法及装置。所述技术方案如下:
一方面,提供了一种基于编码的图像加密隐藏信息的方法,该方法应用于电子设备,该方法包括压缩过程、秘密数据嵌入过程、恢复过程以及秘密数据提取过程:
所述压缩过程包括:
获取待加密的初始图像,所述初始图像的尺寸为m×n,其中,m为所述初始图像的像素行数,n为所述初始图像的像素列数;
获取第一位数b_Num,对所述初始图像进行低位的合并,得到第一压缩图像数据,所述第一压缩图像数据的总位数为m×n×b_Num;
获取第二位数b_Ele,对所述初始图像进行二元组编码,得到延伸序列位数b_count,对所述初始图像进行高位的压缩,得到第二压缩图像数据,所述第二压缩图像数据的总位数为(b_Num+b_Ele)×b_count;
通过所述第一压缩图像数据与所述第二压缩图像数据的总位数,确定所述初始图像编码后剩余空间的总位数b_space,通过预设公式生成随机序列作为第三压缩图像数据,其中,所述第三压缩图像数据的总位数为b_space;
将所述第一压缩图像数据、所述第二压缩图像数据以及所述第三压缩图像数据进行顺次连接,得到初始压缩图像的全部像素点,通过所述初始压缩图像的全部像素点生成m×n的图像,得到初始压缩图像;
所述秘密数据嵌入过程包括:
获取待嵌入的秘密数据,将所述秘密数据替换所述初始压缩图像中的部分第三压缩图像数据,得到嵌入秘密数据的初始压缩图像,其中,所述待嵌入的秘密数据的总位数k≤b_space;
通过所述预设公式,对所述嵌入秘密数据的初始压缩图像进行像素扩散,得到最终压缩加密图像;
所述恢复过程包括:
获取最终压缩加密图像,通过所述预设公式,将所述最终压缩加密图像恢复为像素扩散前的嵌入秘密数据的初始压缩图像;
将所述嵌入秘密数据的初始压缩图像的前m×n×b_Num位数据作为第一序列B1,通过所述第一序列B1得到所述初始图像的低位数据;
将所述嵌入秘密数据的初始压缩图像的[(m×n×b_Num/8)×8+1]位至[m×n×b_Num+(b_Num+b_Ele)×b_count]位数据作为第二序列B2,通过所述第二序列B2得到所述初始图像的高位数据;
将所述低位数据与所述高位数据进行组合,得到恢复后的初始图像;
所述秘密数据提取过程包括:
将所述嵌入秘密数据的初始压缩图像的[m×n×bNum+(bNum+bEle)×bcount]+1位至最后位数据作为第三序列B3,通过所述第三序列B3提取秘密数据。
可选地,所述对所述初始图像进行低位的合并,得到第一压缩图像数据,包括:
通过第一位数b_Num,获取所述初始图像的低位数据A_Low=mod(A,2b_Num),其中A表示所述初始图像的像素值;
将所述低位数据转为二进制数据,A_Low_2=dec2bin(A_Low),将二进制数据转换为字符向量元胞数组,A_Low_cell=cellstr(A_Low_2);
将所有字符向量元胞数组连接成一个序列,
A_Low_connect=strcat(A_Low_cell(1),A_Low_cell(2),…,A_Low_(m×n));
将序列转换为字符型,A_Low_char=char(A_Low_connet),并将A_Low_char每8位一组进行分组,不足8位时后面补0,得到B_Low(i)=A_Low_char((i-1)×8+1,8×i);
将B_Low转为十进制序列,B_L=bin2dec(B_Low)。
可选地,所述对所述初始图像进行二元组编码,得到延伸序列位数b_count,对所述初始图像进行高位的压缩,得到第二压缩图像数据,包括:
通过所述第二位数b_Ele,获取所述初始图像的高位数据A_High=bitshift(A,-b_Num),其中,bitshift(a,b)表示将a对应的二进制向左或向右移动b位,当b>0时左移,当b<0时右移;
将A_High改写为一维序列,并转为double型:A_High_d=double(A_High);
记录连续出现的A_High_d(i)值,并记录其连续出现的次数count:count=find([true;diff(A_High_d(:)~=0;true]);
则每个A_High_d(i)的起始下标:count_1=[count(1:end-1)];A_High_d(i)连续出现的个数count_2=[diff(count)];
当count_2(i)≥2b_Num-1时,对count_2进行拆解,使得:count_2(i)≤2b_Num-1,拆解后的延伸序列记为:COUNT_extend,所述延伸序列位数:b_count=length(COUNT_extend);
将每个相同元素A_High_d(i)与其对应个数COUNT_extend(i)顺次连接成一个新序列,A_High_connect=stract(A_High(count(i)),count_2_extend(i));
将A_High_connect每8位一组,生成新序列,不足8位时后面补0:B_High(i)=A_High_connect((i-1)×8+1,8×i);
将B_High转为十进制序列B_H=bin2dec(B_High),所述十进制序列B_H即为第二压缩图像数据。
可选地,所述通过所述第一压缩图像数据与所述第二压缩图像数据的总位数,确定所述初始图像编码后剩余空间的总位数b_space,包括:
b_space=m×n×8-m×n×b_Num-(b_Num+b_Ele)×b_count
=m×n×(8-b_Num)-(b_Num+b_Ele)×b_count。
可选地,所述通过预设公式生成随机序列作为第三压缩图像数据,包括:
通过Logistic映射的计算公式以及预设的初值x0和μ,生成序列xi,所述Logistic映射的计算公式为:
xk+1=μxk(1-xk)
其中:3.569945≤μ≤4,xk∈[0,1];
将pi每8位一组,并转为十进制,得到序列B_P,B_P=bin2dec(pi),所述B_P即为第三压缩图像数据。
可选地,所述获取待嵌入的秘密数据,将所述秘密数据替换所述初始压缩图像中的部分第三压缩图像数据,包括:
获取待嵌入的秘密数据W=w1,w2,…wk,wi∈{0,1},所述待嵌入的秘密数据的总位数为k;
通过预设的初值x
0′和μ′,通过Logistic映射的计算公式生成长度为k且各元素互不相等的序列Q,
且i≠j时,q
i≠q
j;
当存在正整数j属于序列Q,且j等于序列Q中的qi时,确定wi以及B_P(j),使用wi替换原来的B_P(j),即:
可选地,所述通过所述预设公式,对所述嵌入秘密数据的初始压缩图像进行像素扩散,得到最终压缩加密图像,包括:
通过预设的Logistic映射的计算公式以及预设的初值x0″和μ″,生成一个长为m×n的随机序列D,D=mod(fix(T(i)×1000),256),1≤i≤m×n则:0≤Q≤255;
将所述序列D改写为m×n大小的像素扩散矩阵D′,D′=reshape(Q,m,n);
通过所述嵌入秘密数据的初始压缩图像以及像素扩散矩阵D′,确定所述最终压缩加密图像C,
其中,B表示所述嵌入秘密数据的初始压缩图像。
可选地,所述通过所述第一序列B1得到所述初始图像的低位数据,包括:
将所述第一序列B1中的数据每b_Num位组成一组,得到图像A的低b_Num位。
可选地,所述通过所述第二序列B2得到所述初始图像的高位数据,包括:
将所述第二序列B2中的数据每(b_Num+b_Ele)位组成一组,再根据b_Num和b_Ele得到二元组(Element,Number),根据Number的数值展开Element,得到的序列构成B4;
将序列B4中的数据每b_Ele位组成一组,得到图像A的高b_Ele位。
一方面,提供了一种基于编码的图像加密隐藏信息的装置,该装置应用于电子设备,该装置包括压缩单元、秘密数据嵌入单元、恢复单元以及秘密数据提取单元:
所述压缩单元用于:
获取待加密的初始图像,所述初始图像的尺寸为m×n,其中,m为所述初始图像的像素行数,n为所述初始图像的像素列数;
获取第一位数b_Num,对所述初始图像进行低位的合并,得到第一压缩图像数据,所述第一压缩图像数据的总位数为m×n×b_Num;
获取第二位数b_Ele,对所述初始图像进行二元组编码,得到延伸序列位数b_count,对所述初始图像进行高位的压缩,得到第二压缩图像数据,所述第二压缩图像数据的总位数为(b_Num+b_Ele)×b_count;
通过所述第一压缩图像数据与所述第二压缩图像数据的总位数,确定所述初始图像编码后剩余空间的总位数b_space,通过预设公式生成随机序列作为第三压缩图像数据,其中,所述第三压缩图像数据的总位数为b_space;
将所述第一压缩图像数据、所述第二压缩图像数据以及所述第三压缩图像数据进行顺次连接,得到初始压缩图像的全部像素点,通过所述初始压缩图像的全部像素点生成m×n的图像,得到初始压缩图像;
所述秘密数据嵌入单元用于:
获取待嵌入的秘密数据,将所述秘密数据替换所述初始压缩图像中的部分第三压缩图像数据,得到嵌入秘密数据的初始压缩图像,其中,所述待嵌入的秘密数据的总位数k≤b_space;
通过所述预设公式,对所述嵌入秘密数据的初始压缩图像进行像素扩散,得到最终压缩加密图像;
所述恢复单元用于:
获取最终压缩加密图像,通过所述预设公式,将所述最终压缩加密图像恢复为像素扩散前的嵌入秘密数据的初始压缩图像;
将所述嵌入秘密数据的初始压缩图像的前m×n×b_Num位数据作为第一序列B1,通过所述第一序列B1得到所述初始图像的低位数据;
将所述嵌入秘密数据的初始压缩图像的[(m×n×b_Num/8)×8+1]位至[m×n×b_Num+(b_Num+b_Ele)×b_count]位数据作为第二序列B2,通过所述第二序列B2得到所述初始图像的高位数据;
将所述低位数据与所述高位数据进行组合,得到恢复后的初始图像;
所述秘密数据提取单元用于:
将所述嵌入秘密数据的初始压缩图像的[m×n×bNum+(bNum+bEle)×bcount]+1位至最后位数据作为第三序列B3,通过所述第三序列B3提取秘密数据。
可选地,所述压缩单元,用于:
通过第一位数b_Num,获取所述初始图像的低位数据A_Low=mod(A,2b_Num),其中A表示所述初始图像的像素值;
将所述低位数据转为二进制数据,A_Low_2=dec2bin(A_Low),将二进制数据转换为字符向量元胞数组,A_Low_cell=cellstr(A_Low_2);
将所有字符向量元胞数组连接成一个序列,
A_Low_connect=strcat(A_Low_cell(1),A_Low_cell(2),…,A_Low_(m×n));
将序列转换为字符型,A_Low_char=char(A_Low_connet),并将A_Low_char每8位一组进行分组,不足8位时后面补0,得到B_Low(i)=A_Low_char((i-1)×8+1,8×i);
将B_Low转为十进制序列,B_L=bin2dec(B_Low)。
可选地,所述压缩单元,用于:
通过所述第二位数b_Ele,获取所述初始图像的高位数据A_High=bitshift(A,-b_Num),其中,bitshift(a,b)表示将a对应的二进制向左或向右移动b位,当b>0时左移,当b<0时右移;
将A_High改写为一维序列,并转为double型:A_High_d=double(A_High);
记录连续出现的A_High_d(i)值,并记录其连续出现的次数count:count=find([true;diff(A_High_d(:)~=0;true]);
则每个A_High_d(i)的起始下标:count_1=[count(1:end-1)];A_High_d(i)连续出现的个数count_2=[diff(count)];
当count_2(i)≥2b_Num-1时,对count_2进行拆解,使得:count_2(i)≤2b_Num-1,拆解后的延伸序列记为:COUNT_extend,所述延伸序列位数:b_count=length(COUNT_extend);
将每个相同元素A_High_d(i)与其对应个数COUNT_extend(i)顺次连接成一个新序列,A_High_connect=stract(A_High(count(i)),count_2_extend(i));
将A_High_connect每8位一组,生成新序列,不足8位时后面补0:B_High(i)=A_High_connect((i-1)×8+1,8×i);
将B_High转为十进制序列B_H=bin2dec(B_High),所述十进制序列B_H即为第二压缩图像数据。
可选地,所述压缩单元,用于:
b_space=m×n×8-m×n×b_Num-(b_Num+b_Ele)×b_count
=m×n×(8-b_Num)-(b_Num+b_Ele)×b_count。
可选地,所述压缩单元,用于:
通过Logistic映射的计算公式以及预设的初值x0和μ,生成序列xi,所述Logistic映射的计算公式为:
xk+1=μxk(1-xk)
其中:3.569945≤μ≤4,xk∈[0,1];
将pi每8位一组,并转为十进制,得到序列B_P,B_P=bin2dec(pi),所述B_P即为第三压缩图像数据。
可选地,所述秘密数据嵌入单元,用于:
获取待嵌入的秘密数据W=w1,w2,…wk,wi∈{0,1},所述待嵌入的秘密数据的总位数为k;
通过预设的初值x
0′和μ′,通过Logistic映射的计算公式生成长度为k且各元素互不相等的序列Q,
且i≠j时,q
i≠q
j;
当存在正整数j属于序列Q,且j等于序列Q中的qi时,确定wi以及B_P(j),使用wi替换原来的B_P(j),即:
可选地,所述秘密数据嵌入单元,用于:
通过预设的Logistic映射的计算公式以及预设的初值x0″和μ″,生成一个长为m×n的随机序列D,D=mod(fix(T(i)×1000),256),1≤i≤m×n则:0≤Q≤255;
将所述序列D改写为m×n大小的像素扩散矩阵D′,D′=reshape(Q,m,n);
通过所述嵌入秘密数据的初始压缩图像以及像素扩散矩阵D′,确定所述最终压缩加密图像C,
其中,B表示所述嵌入秘密数据的初始压缩图像。
可选地,所述恢复单元,用于:
将所述第一序列B1中的数据每b_Num位组成一组,得到图像A的低b_Num位。
可选地,所述恢复单元,用于:
将所述第二序列B2中的数据每(b_Num+b_Ele)位组成一组,再根据b_Num和b_Ele得到二元组(Element,Number),根据Number的数值展开Element,得到的序列构成B4;
将序列B4中的数据每b_Ele位组成一组,得到图像A的高b_Ele位。
一方面,提供了一种电子设备,所述电子设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述至少一条指令由所述处理器加载并执行以实现上述基于编码的图像加密隐藏信息的方法。
一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现上述基于编码的图像加密隐藏信息的方法。
本发明实施例提供的技术方案带来的有益效果至少包括:
上述方案中,通过对初始图像进行低位合并、高位压缩、随机序列补充、秘密数据嵌入等方法,对图像进行压缩加密并嵌入秘密数据,该方法非常适合于密文域信息隐藏,其主要优点有:(1)该算法是密文域可逆可分离算法;(2)该方法有较好通用性,适合任意类型图像,且操作对象可以是明文图像,也可以是密文图像;(3)该方法在压缩图像的同时,直接生成高质量加密图像,算法效率较高;(4)秘密信息隐藏于加密图像的补位部分,而该部分与图像自身并无关联,因此安全性较高;(5)选择合适参数,大多数图像有较大的嵌入容量。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
本发明实施例提供了一种基于编码的图像加密隐藏信息的方法,该方法可以由电子设备实现。本发明采用二元组编码方法,利用编码产生的冗长余空间嵌入秘密数据,整个过程可概括为:高位压缩、低位重组、空余补缺、信息嵌入、像素扩散,算法有较大的嵌入容量和较高的安全性,下面采用举例的方式讲解二元组编码方法的原理。
将一个二进制序列中被选定的一个或多个位的组合称为一个元素,记为:Element,将Element在序列中连续出现的次数记为:Number,则可用Element和与其对应的Number组成一个二元组(Element,Number),那么对于任意一个二进制序列均可以用二元组将其改写为:(Element1,Number1),(Element2,Number2),…,(Elementn,Numbern)的形式,将Element和Number统一用二进制表示,生成的二进制序列称之为二元组编码,如图1(a)所示。
如果每一个二元组的位数不同,那连续编码后就很难识别哪部分是Element,哪部是Number,为了准确识别与还原二元组,编码前必须给出明确的Element和Number位数,记:Element的位数b_Ele=length(Element),Number的位数b_Num=length(Number),那么同一序列的二元组编码需要执行统一的位数b_Ele和b-Num,当位数不足时需要补0,这样对于给定的b_Ele和b_Num,对应的二元组编码就有了唯一性和可还原性,如图1(b)所示。
但需要注意的是:Number的位数为b_Num,其最多能表示的数值为:2b_Num_1,在实际编码时会出现Element出现次数num超过2b_Num-1的情形,也就是说:用一个b_Num位不足以表示num,即:当num>2b_Num-1时,需要对二元组进行拆解,增加分组,如:对于二进制序列101010101010101011111101,长度为24位,其对应的二元组本该写为(10,8)(11,3)(01,1),但若设定的b-Ele=2,b-Num=2,则一个组最多能表示连续出现的3个Element,当总数超过3时需要拆解,所以,101010101010101011111101对应的正确二元组应为:(10,3)(10,3)(10,2)(11,3)(01,1),二元组编码为:10111011101011110101,编码后的长度为20位,比原始码长少了4位;但同样的序列,如果我们设定:b_Ele=4,b_Num=3,则序列101010101010101011111101对应二元组为(1010,4)(1111,1)(1101,1),编码为:101010011110011101001,长度为21位,比原始码长少了3位。因此,同样的序列,设定不同的b_Ele和b_Num,得到的二元组编码的长度也不同。
本实施例提供了一种基于编码的图像加密隐藏信息的方法,该方法包括压缩过程、秘密数据嵌入过程、恢复过程、秘密数据提取过程。图2是根据一示例性实施例示出的一种基于编码的图像加密隐藏信息的方法的图像压缩过程流程图,该方法用于电子设备中,本实施例以图像的压缩过程进行说明,包括以下步骤:
步骤201、获取待加密的初始图像,初始图像的尺寸为m×n,其中,m为初始图像的像素行数,n为初始图像的像素列数。
步骤202、获取第一位数b_Num,对初始图像进行低位的合并,得到第一压缩图像数据,第一压缩图像数据的总位数为m×n×b_Num。
一种可行的实施方式中,第一位数b_Num为预先设定的数据。对初始图像进行低位的合并,得到第一压缩图像数据,具体包括下述步骤2021-2025:
步骤2021、通过第一位数b_Num,获取初始图像的低位数据A_Low=mod(A,2b_Num),其中A表示初始图像的像素值,A_Low为低位数据的数组,mod()表示取余运算。举例来讲,假设初始图像的某个像素点的像素值A为163,b_Num预设为4,则A_Low=mod(163,24)=3。
步骤2022、将低位数据转为二进制数据,A_Low_2=dec2bin(A_Low),将二进制数据转换为字符向量元胞数组,A_Low_cell=cellstr(A_Low_2)。
步骤2023、将所有字符向量元胞数组连接成一个序列,
A_Low_connect=strcat(A_Low_cell(1),A_Low_cell(2),…,A_Low_(m×n))。
步骤2024、将序列转换为字符型,A_Low_char=char(A_Low_connet),并将A_Low_char每8位一组进行分组,不足8位时后面补0,得到B_Low(i)=A_Low_char((i-1)×8+1,8×i)。
步骤2025、将B_Low转为十进制序列,B_L=bin2dec(B_Low),B_L即为第一压缩图像数据。
步骤203、获取第二位数b_Ele,对初始图像进行二元组编码,得到延伸序列位数b_count,对初始图像进行高位的压缩,得到第二压缩图像数据,第二压缩图像数据的总位数为(b_Num+b_Ele)×b_count。
一种可行的实施方式中,第二位数b_Ele为预先设置的数据,得到第二压缩图像数据的具体步骤可以包括如下步骤2031-2037:
步骤2031、通过第二位数b_Ele,获取初始图像的高位数据A_High=bitshift(A,-b_Num),其中,bitshift(a,b)表示将a对应的二进制向左或向右移动b位,当b>0时左移,当b<0时右移。例如,bitshift(13,-2)=bitshift((1101)2,-2)=(11)2=3。
步骤2032、将A_High改写为一维序列,并转为double型:A_High_d=double(A_High)。
步骤2033、记录连续出现的A_High_d(i)值,并记录其连续出现的次数count:count=find([true;diff(A_High_d(:)~=0;true])。则每个A_High_d(i)的起始下标:count_1=[count(1:end-1)]。A_High_d(i)连续出现的个数count_2=[diff(count)]。
步骤2034、当count_2(i)≥2b_Num-1时,对count_2进行拆解,使得:count_2(i)≤2b_Num-1,拆解后的延伸序列记为:COUNT_extend,延伸序列位数:b_count=length(COUNT_extend)。
步骤2035、将每个相同元素A_High_d(i)与其对应个数COUNT_extend(i)顺次连接成一个新序列,A_High_connect=stract(A_High(count(i)),count_2_extend(i))。
步骤2036、将A_High_connect每8位一组,生成新序列,不足8位时后面补0:B_High(i)=A_High_connect((i-1)×8+1,8×i)。
步骤2037、将B_High转为十进制序列B_H=bin2dec(B_High),十进制序列B_H即为第二压缩图像数据。
步骤204、通过第一压缩图像数据与第二压缩图像数据的总位数,确定初始图像编码后剩余空间的总位数b_space,通过预设公式生成随机序列作为第三压缩图像数据,其中,第三压缩图像数据的总位数为b_space。
一种可行的实施方式中,可以通过下述公式(1)通过第一压缩图像数据与第二压缩图像数据的总位数,计算初始图像编码后剩余空间的总位数b_space:
b_space=m×n×8-m×n×b_Num-(b_Num+b_Ele)×b_count……(1)
=m×n×(8-b_Num)-(b_Num+b_Ele)×b_count。
可选地,通过预设公式生成随机序列作为第三压缩图像数据可以包括以下步骤2041-2043:
步骤2041、通过Logistic映射的计算公式以及预设的初值x0和μ,生成序列xi,Logistic映射的计算公式为:
xk+1=μxk(1-xk)
其中:3.569945≤μ≤4,xk∈[0,1]。
步骤2043、将pi每8位一组,并转为十进制,得到序列B_P,B_P=bin2dec(pi),B_P即为第三压缩图像数据。
步骤205、将第一压缩图像数据、第二压缩图像数据以及第三压缩图像数据进行顺次连接,得到初始压缩图像的全部像素点,通过初始压缩图像的全部像素点生成m×n的图像,得到初始压缩图像。
需要说明的是,在对初始图像进行处理时,可以对初始图像按顺序进行低位合并、高位压缩、生成随机序列进行补位,执行顺序如上述步骤201-205,除此之外,还可以按照高位压缩、低位合并、生成随机序列进行补位的顺序对初始图像进行处理,执行顺序即按照步骤201、203、202、204、205,但需要注意,在进行图像处理时的执行顺序需要与恢复图像时的执行顺序保持相同。
图3是根据一示例性实施例示出的一种基于编码的图像加密隐藏信息的方法的秘密数据嵌入过程流程图,该方法用于电子设备中,本实施例以秘密数据嵌入初始压缩图像的过程进行说明,包括以下步骤:
步骤301、获取待嵌入的秘密数据,将秘密数据替换初始压缩图像中的部分第三压缩图像数据,得到嵌入秘密数据的初始压缩图像。
其中,待嵌入的秘密数据的总位数k≤b_space。
可选地,获取待嵌入的秘密数据,将秘密数据替换初始压缩图像中的部分第三压缩图像数据,包括以下步骤3011-3013:
步骤3011、获取待嵌入的秘密数据W=w1,w2,…wk,wi∈{0,1},待嵌入的秘密数据的总位数为k。
步骤3012、通过预设的初值x
0′和μ′,通过Logistic映射的计算公式生成长度为k且各元素互不相等的序列Q,
且i≠j时,q
i≠q
j。
一种可行的实施方式中,该步骤的Logistic映射的计算公式与上述步骤2041中Logistic映射的计算公式相同,均为xk+1=μxk(1-xk),但该步骤的初值x0′和μ′与上述步骤2041中的初值x0和μ不相同。
步骤3013、当存在正整数j属于序列Q,且j等于序列Q中的qi时,确定wi以及B_P(j),使用wi替换原来的B_P(j),即:
完成替换的序列为B_S。
举例来讲,假设B_P=1011010010111,W=1001100,Q=21159748,当j=2,i=1,wi=w1=1,B_P(j)=B_P(2)=0,qi=q1=2时,j=qi,则使用w1=1替换B_P(2)=0,使得原来序列B_P中的第2位数据由0修改为1,其它替换可以参考下述表1。
表1
需要说明的是,上述步骤3012-3013是通过乱序替换的方式,将秘密数据打乱顺序嵌入到初始压缩图像中,这样,可以加大秘密数据的安全性,使得其他人员不能从嵌入秘密数据的初始压缩图像中轻易地提取出秘密数据。当然,当用户不需要加大秘密数据的安全性时,也可以采用顺序替换的方式,将秘密数据按照原始顺序替换进初始压缩图像中,或者采用其它的方法确定秘密数据的替换顺序,然后按照替换顺序将秘密数据替换进初始压缩图像中,本发明对此不作限定。
步骤302、通过预设公式,对嵌入秘密数据的初始压缩图像进行像素扩散,得到最终压缩加密图像。
可选地,通过预设公式,对嵌入秘密数据的初始压缩图像进行像素扩散,得到最终压缩加密图像,包括以下步骤3021-3023:
步骤3021、通过预设的Logistic映射的计算公式以及预设的初值x0″和μ″,生成一个长为m×n的随机序列D,D=mod(fix(T(i)×1000),256),1≤i≤m×n则:0≤Q≤255。
步骤3022、将序列D改写为m×n大小的像素扩散矩阵D′,D′=reshape(Q,m,n)。
步骤3023、通过嵌入秘密数据的初始压缩图像以及像素扩散矩阵D′,确定最终压缩加密图像C,
其中,B表示嵌入秘密数据的初始压缩图像。
图4是根据一示例性实施例示出的一种基于编码的图像加密隐藏信息的方法的图像恢复过程流程图,该方法用于电子设备中,本实施例以图像回复过程进行说明,包括以下步骤:
步骤401、获取最终压缩加密图像,通过预设公式,将最终压缩加密图像恢复为像素扩散前的嵌入秘密数据的初始压缩图像。
一种可行的实施方式中,最终压缩加密图像可以记为C,该最终压缩加密图像的尺寸为m×n。预设公式为上述步骤204、301使用相同的Logistic映射的计算公式,且在恢复压缩图像时,获取与上述步骤302中相同的初值x
0″和μ″,通过Logistic映射的计算公式、初值x
0″和μ″,生成与上述步骤302中相同的序列D′,通过
获取嵌入秘密数据的初始压缩图像。
步骤402、将嵌入秘密数据的初始压缩图像的前m×n×b_Num位数据作为第一序列B1,通过第一序列B1得到初始图像的低位数据。
一种可行的实施方式中,获取第一位数b_Num,该第一位数b_Num与上述步骤202中的第一位数b_Num相同。计算m×n×b_Num,该乘积数值为初始图像通过低位合并得到的第一压缩图像数据的总位数,因此,将嵌入秘密数据的初始压缩图像的前m×n×b_Num位数据作为第一序列B1,通过第一序列B1得到初始图像的低位数据,具体地,将所述第一序列B1中的数据每b_Num位组成一组,得到图像A的低b_Num位数据。
步骤403、将嵌入秘密数据的初始压缩图像的[(m×n×b_Num/8)×8+1]位至[m×n×b_Num+(b_Num+b_Ele)×b_count]位数据作为第二序列B2,通过第二序列B2得到初始图像的高位数据。
一种可行的实施方式中,获取第二位数b_Ele,该第二位数b_Ele与上述步骤203中的第二位数b_Ele相同,计算(b_Num+b_Ele)×b_count,该乘积为高位压缩得到的第二压缩图像数据的总位数,且因为第二压缩图像数据排在第一压缩图像数据的后边,因此,嵌入秘密数据的初始压缩图像的[(m×n×b_Num/8)×8+1]位至[m×n×b_Num+(b_Num+b_Ele)×b_count]位为第二压缩图像数据,通过第二序列B2得到初始图像的高位数据,具体地,将第二序列B2中的数据每(b_Num+b_Ele)位组成一组,再根据b_Num和b_Ele得到二元组(Element,Number),根据Number的数值展开Element,得到的序列构成B4;将序列B4中的数据每b_Ele位组成一组,得到图像A的高b_Ele位数据。
步骤404、将低位数据与高位数据进行组合,得到恢复后的初始图像。
图5是根据一示例性实施例示出的一种基于编码的图像加密隐藏信息的方法的秘密数据提取过程流程图,该方法用于电子设备中,本实施例以从嵌入秘密数据的初始压缩图像中提取秘密数据的过程进行说明,包括以下步骤:
步骤501、根据预设的初值x0′和μ′以及Logistic映射的计算公式,生成序列Q。
其中,预设的初值x0′和μ′以及Logistic映射的计算公式与上述步骤301中的相同,这样才能保证生成的序列Q与上述步骤301生成的序列Q完全相同。
步骤502、将嵌入秘密数据的初始压缩图像的[m×n×b_Num+(b_Ele+b_Num)×b_count]+1位至最后位数据作为第三序列B3。
一种可行的实施方式中,因为嵌入秘密数据的第三压缩图像数据排在第一压缩图像数据以及第二压缩图像数据之后,且第一压缩图像数据的总位数为m×n×b_Num,第二压缩图像数据的总位数为(b_Num+b_Ele)×b_count,因此,从[m×n×b_Num+(b_Ele+b_Num)×b_count]+1位至最后位数据为嵌入秘密数据的第三压缩图像数据,将其作为第三序列B3。
步骤503、在序列B3中顺次找到序列Q对应位置的值wi=B3(Q(i)),得到的序列W=w1,w2,w3,......wk即为秘密数据。
下面通过举例的方式进行说明:
获取高位和低位的预设公式:
High_x=bitshift(A,-x),Low_y=mod(A,2y)
假设原始图像A的连续16个像素灰度值为:163,162,168,166,167,166,164,160,124,15,13,8,7,9,5,1,设定:b_Ele=4,b_Num=4,首先获取High_4和Low_4,然后用16个Low_4两两一组重组成8个新的像素作为图像B的第一部分(第1~8个像素);High_4采用(High_4,4)方式进行编码,共可组成3个新的像素,作为图像B的第二部分(第9~11个像素),则第12~16位即为压缩后的冗余空间,可用于秘密信息的嵌入,整幅图像的编码方法如下表2所示,图像重组结构示意图如图6所示。
表2
需要说明的是,秘密数据的嵌入容量取决于图像的压缩比,通过上述论述,可以确定一幅图像的压缩比取决于:
(1)(Element,Number)的核心参数b_Ele和b_Num;
(2)“ELement类型数”(num)是指不改变排列顺序的情形下Element出现的类型总数;
(3)“Element真实标识数”(b_count)是指标识“Element类型数”所需的真实数量(当Element连续出现的数量超过2b_Num-1时,需要拆组),下述表3给出的是512×512大小Lena灰度图,图7是标准灰度图像各步骤的直方图,表4为b_Ele=b_Num时的各相关参数。
表3
压缩位数的计算公式为:
compression_bit=m×n×8-m×n×b_Num-(b_Num+b_Ele)×b_count
=m×n×(8-b_Num)-(b_Num+b_Ele)×b_count
压缩比:compression_ratio=compression_bit/m×n×8,最大压缩比也是最大嵌入率。
表4
因此,本申请算法嵌入率与给定的载体图像以及选择的参数有关,当参数选择合适时,嵌入容量较大。
从图7以及表4给出的直方图和相邻像素相关性分析均表明,使用本申请算法对明文图像进行低位组合、高位压缩、冗余位补缺后得到的重组图像有较好的加密效果,而在压缩产生的冗余位中嵌入秘密信息后,对加密图像直方图的影响较小,但对相邻像素的关联性进一步破坏,像素扩散使得加密图像的直方图趋于平均化,有效提高了抗统计分析能力。
本申请实施例中,通过对初始图像进行低位合并、高位压缩、随机序列补充、秘密数据嵌入等方法,对图像进行压缩加密并嵌入秘密数据,该方法非常适合于密文域信息隐藏,其主要优点有:(1)该算法是密文域可逆可分离算法;(2)该方法有较好通用性,适合任意类型图像,且操作对象可以是明文图像,也可以是密文图像;(3)该方法在压缩图像的同时,直接生成高质量加密图像,算法效率较高;(4)秘密信息隐藏于加密图像的补位部分,而该部分与图像自身并无关联,因此安全性较高;(5)选择合适参数,大多数图像有较大的嵌入容量。
图8是根据一示例性实施例示出的一种基于编码的图像加密隐藏信息的装置框图。参照图8,该装置包括压缩单元810、秘密数据嵌入单元820、恢复单元830以及秘密数据提取单元840:
所述压缩单元810用于:
获取待加密的初始图像,所述初始图像的尺寸为m×n,其中,m为所述初始图像的像素行数,n为所述初始图像的像素列数;
获取第一位数b_Num,对所述初始图像进行低位的合并,得到第一压缩图像数据,所述第一压缩图像数据的总位数为m×n×b_Num;
获取第二位数b_Ele,对所述初始图像进行二元组编码,得到延伸序列位数b_count,对所述初始图像进行高位的压缩,得到第二压缩图像数据,所述第二压缩图像数据的总位数为(b_Num+b_Ele)×b_count;
通过所述第一压缩图像数据与所述第二压缩图像数据的总位数,确定所述初始图像编码后剩余空间的总位数b_space,通过预设公式生成随机序列作为第三压缩图像数据,其中,所述第三压缩图像数据的总位数为b_space;
将所述第一压缩图像数据、所述第二压缩图像数据以及所述第三压缩图像数据进行顺次连接,得到初始压缩图像的全部像素点,通过所述初始压缩图像的全部像素点生成m×n的图像,得到初始压缩图像;
所述秘密数据嵌入单元820用于:
获取待嵌入的秘密数据,将所述秘密数据替换所述初始压缩图像中的部分第三压缩图像数据,得到嵌入秘密数据的初始压缩图像,其中,所述待嵌入的秘密数据的总位数k≤b_space;
通过所述预设公式,对所述嵌入秘密数据的初始压缩图像进行像素扩散,得到最终压缩加密图像;
所述恢复单元830用于:
获取最终压缩加密图像,通过所述预设公式,将所述最终压缩加密图像恢复为像素扩散前的嵌入秘密数据的初始压缩图像;
将所述嵌入秘密数据的初始压缩图像的前m×n×b_Num位数据作为第一序列B1,通过所述第一序列B1得到所述初始图像的低位数据;
将所述嵌入秘密数据的初始压缩图像的[(m×n×b_Num/8)×8+1]位至[m×n×b_Num+(b_Num+b_Ele)×b_count]位数据作为第二序列B2,通过所述第二序列B2得到所述初始图像的高位数据;
将所述低位数据与所述高位数据进行组合,得到恢复后的初始图像;
所述秘密数据提取单元840用于:
将所述嵌入秘密数据的初始压缩图像的[m×n×bNum+(bNum+bEle)×bcount]+1位至最后位数据作为第三序列B3,通过所述第三序列B3提取秘密数据。
可选地,所述压缩单元,用于:
通过第一位数b_Num,获取所述初始图像的低位数据A_Low=mod(A,2b_Num),其中A表示所述初始图像的像素值;
将所述低位数据转为二进制数据,A_Low_2=dec2bin(A_Low),将二进制数据转换为字符向量元胞数组,A_Low_cell=cellstr(A_Low_2);
将所有字符向量元胞数组连接成一个序列,
A_Low_connect=strcat(A_Low_cell(1),A_Low_cell(2),…,A_Low_(m×n));
将序列转换为字符型,A_Low_char=char(A_Low_connet),并将A_Low_char每8位一组进行分组,不足8位时后面补0,得到B_Low(i)=A_Low_char((i-1)×8+1,8×i);
将B_Low转为十进制序列,B_L=bin2dec(B_Low)。
可选地,所述压缩单元810,用于:
通过所述第二位数b_Ele,获取所述初始图像的高位数据A_High=bitshift(A,-b_Num),其中,bitshift(a,b)表示将a对应的二进制向左或向右移动b位,当b>0时左移,当b<0时右移;
将A_High改写为一维序列,并转为double型:A_High_d=double(A_High);
记录连续出现的A_High_d(i)值,并记录其连续出现的次数count:count=find([true;diff(A_High_d(:)~=0;true]);
则每个A_High_d(i)的起始下标:count_1=[count(1:end-1)];A_High_d(i)连续出现的个数count_2=[diff(count)];
当count_2(i)≥2b_Num-1时,对count_2进行拆解,使得:count_2(i)≤2b_Num-1,拆解后的延伸序列记为:COUNT_extend,所述延伸序列位数:b_count=length(COUNT_extend);
将每个相同元素A_High_d(i)与其对应个数COUNT_extend(i)顺次连接成一个新序列,A_High_connect=stract(A_High(count(i)),count_2_extend(i));
将A_High_connect每8位一组,生成新序列,不足8位时后面补0:B_High(i)=A_High_connect((i-1)×8+1,8×i);
将B_High转为十进制序列B_H=bin2dec(B_High),所述十进制序列B_H即为第二压缩图像数据。
可选地,所述压缩单元810,用于:
b_space=m×n×8-m×n×b_Num-(b_Num+b_Ele)×b_count
=m×n×(8-b_Num)-(b_Num+b_Ele)×b_count。
可选地,所述压缩单元810,用于:
通过Logistic映射的计算公式以及预设的初值x0和μ,生成序列xi,所述Logistic映射的计算公式为:
xk+1=μxk(1-xk)
其中:3.569945≤μ≤4,xk∈[0,1];
将pi每8位一组,并转为十进制,得到序列B_P,B_P=bin2dec(pi),所述B_P即为第三压缩图像数据。
可选地,所述秘密数据嵌入单元820,用于:
获取待嵌入的秘密数据W=w1,w2,…wk,wi∈{0,1},所述待嵌入的秘密数据的总位数为k;
通过预设的初值x
0′和μ′,通过Logistic映射的计算公式生成长度为k且各元素互不相等的序列Q,
且i≠j时,q
i≠q
j;
当存在正整数j属于序列Q,且j等于序列Q中的qi时,确定wi以及B_P(j),使用wi替换原来的B_P(j),即:
可选地,所述秘密数据嵌入单元820,用于:
通过预设的Logistic映射的计算公式以及预设的初值x0″和μ″,生成一个长为m×n的随机序列D,D=mod(fix(T(i)×1000),256),1≤i≤m×n则:0≤Q≤255;
将所述序列D改写为m×n大小的像素扩散矩阵D′,D′=reshape(Q,m,n);
通过所述嵌入秘密数据的初始压缩图像以及像素扩散矩阵D′,确定所述最终压缩加密图像C,
其中,B表示所述嵌入秘密数据的初始压缩图像。
可选地,所述恢复单元830,用于:
将所述第一序列B1中的数据每b_Num位组成一组,得到图像A的低b_Num位。
可选地,所述恢复单元830,用于:
将所述第二序列B2中的数据每(b_Num+b_Ele)位组成一组,再根据b_Num和b_Ele得到二元组(Element,Number),根据Number的数值展开Element,得到的序列构成B4;
将序列B4中的数据每b_Ele位组成一组,得到图像A的高b_Ele位。
本申请实施例中,通过对初始图像进行低位合并、高位压缩、随机序列补充、秘密数据嵌入等方法,对图像进行压缩加密并嵌入秘密数据,该方法非常适合于密文域信息隐藏,其主要优点有:(1)该算法是密文域可逆可分离算法;(2)该方法有较好通用性,适合任意类型图像,且操作对象可以是明文图像,也可以是密文图像;(3)该方法在压缩图像的同时,直接生成高质量加密图像,算法效率较高;(4)秘密信息隐藏于加密图像的补位部分,而该部分与图像自身并无关联,因此安全性较高;(5)选择合适参数,大多数图像有较大的嵌入容量。
图9是本发明实施例提供的一种电子设备900的结构示意图,该电子设备900可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessing units,CPU)901和一个或一个以上的存储器902,其中,所述存储器902中存储有至少一条指令,所述至少一条指令由所述处理器901加载并执行以实现下述基于编码的图像加密隐藏信息的方法的步骤:
所述压缩过程包括:
获取待加密的初始图像,所述初始图像的尺寸为m×n,其中,m为所述初始图像的像素行数,n为所述初始图像的像素列数;
获取第一位数b_Num,对所述初始图像进行低位的合并,得到第一压缩图像数据,所述第一压缩图像数据的总位数为m×n×b_Num;
获取第二位数b_Ele,对所述初始图像进行二元组编码,得到延伸序列位数b_count,对所述初始图像进行高位的压缩,得到第二压缩图像数据,所述第二压缩图像数据的总位数为(b_Num+b_Ele)×b_count;
通过所述第一压缩图像数据与所述第二压缩图像数据的总位数,确定所述初始图像编码后剩余空间的总位数b_space,通过预设公式生成随机序列作为第三压缩图像数据,其中,所述第三压缩图像数据的总位数为b_space;
将所述第一压缩图像数据、所述第二压缩图像数据以及所述第三压缩图像数据进行顺次连接,得到初始压缩图像的全部像素点,通过所述初始压缩图像的全部像素点生成m×n的图像,得到初始压缩图像;
所述秘密数据嵌入过程包括:
获取待嵌入的秘密数据,将所述秘密数据替换所述初始压缩图像中的部分第三压缩图像数据,得到嵌入秘密数据的初始压缩图像,其中,所述待嵌入的秘密数据的总位数k≤b_space;
通过所述预设公式,对所述嵌入秘密数据的初始压缩图像进行像素扩散,得到最终压缩加密图像;
所述恢复过程包括:
获取最终压缩加密图像,通过所述预设公式,将所述最终压缩加密图像恢复为像素扩散前的嵌入秘密数据的初始压缩图像;
将所述嵌入秘密数据的初始压缩图像的前m×n×b_Num位数据作为第一序列B1,通过所述第一序列B1得到所述初始图像的低位数据;
将所述嵌入秘密数据的初始压缩图像的[(m×n×b_Num/8)×8+1]位至[m×n×b_Num+(b_Num+b_Ele)×b_count]位数据作为第二序列B2,通过所述第二序列B2得到所述初始图像的高位数据;
将所述低位数据与所述高位数据进行组合,得到恢复后的初始图像;
所述秘密数据提取过程包括:
将所述嵌入秘密数据的初始压缩图像的[m×n×bNum+(bNum+bEle)×bcount]+1位至最后位数据作为第三序列B3,通过所述第三序列B3提取秘密数据。
本申请实施例中,通过对初始图像进行低位合并、高位压缩、随机序列补充、秘密数据嵌入等方法,对图像进行压缩加密并嵌入秘密数据,该方法非常适合于密文域信息隐藏,其主要优点有:(1)该算法是密文域可逆可分离算法;(2)该方法有较好通用性,适合任意类型图像,且操作对象可以是明文图像,也可以是密文图像;(3)该方法在压缩图像的同时,直接生成高质量加密图像,算法效率较高;(4)秘密信息隐藏于加密图像的补位部分,而该部分与图像自身并无关联,因此安全性较高;(5)选择合适参数,大多数图像有较大的嵌入容量。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括指令的存储器,上述指令可由终端中的处理器执行以完成上述基于编码的图像加密隐藏信息的方法。例如,所述计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。