1.一种JPEG图像比特流加密域可逆数据隐藏方法,包括如下步骤:A、JPEG比特流加密:
A1、交流系数置乱:
A1.1、比特流数据读取:
用户读取大小为H×W的JPEG格式的图像X,获得图像X的原始比特流J,J={SOI,JH,ECS1,ECS2,...,ECSn,...,ECSN,EOI},其中:SOI为图像开始标记符,JH为JPEG头文件,EOI为图像结束标记符;
ECSn为图像中的第n个图像块熵编码,N为图像块熵编码的个数, H为图像X的行数、W为图像X的列数;
A1.2、交流系数解码:
对原始比特流J中的第n个图像块熵编码ECSn中所有的交流系数熵编码ACC
A1.3、AC系数分组:
找出第n个图像块熵编码ECSn的交流系数Cn中最后一个非零交流系数,记为ACn,T,其序号为T;用户对第n个图像块熵编码ECSn的交流系数Cn中的前T个交流系数ACn,t依次进行分组:如果交流系数ACn,t连续为0,则将这些交流系数ACn,t构成一个分组 否则,一个交流系数ACn,t独立构成一个分组 然后,将这些分组 依次拼接,得到第n个图像块熵编码ECSn的系数分组序列Bn, 其中r为第n个图像块熵编码ECSn的交流系数分组 的序号,Rn为第n个图像块熵编码ECSn的交流系数分组 的个数;
A1.4、交流系数分组序列置乱:
在第n个图像块熵编码ECSn的交流系数分组序列Bn中,对前Rn-1个交流系数分序列进行分类,如果交流系数分组 中的交流系数全为0,记为交流系数为零的分组 否则,记为交流系数非零的分组将所有的交流系数非零的分组 依次拼接,得到交流系数非零的分组序列Bn,1,其中r’为交流系数非零的分组 的序号,r1为交流系数非零的分组 的个数;
然后,根据加密密钥K1对交流系数非零的分组序列Bn,1进行伪随机置乱生成交流系数非零的置乱分组序列 其中, 为交流系数非零的置乱分组序列 中的第r’个交流系数非零的置乱分组;
将所有的交流系数为零的分组 依次拼接,得到交流系数为零的分组序列Bn,0,其中 为第r”个交流系数为零的置乱分组,r0为交流系数为零的置乱分组 的个数;r0+r1=Rn-1;r0≤r1;
然后,根据加密密钥K1对交流系数为零的分组序列Bn,0进行伪随机置乱生成交流系数为零的置乱分组序列将交流系数为零的置乱分组序列 中的交流系数为零的置乱分组 与交流系数非零的置乱分组序列 中前r0个交流系数非零的置乱分组 依次交替拼接,再与置乱交流系数非零的分组序列 中后r1-r0个置乱交流系数非零的分组 和系数分组序列Bn中最后一个系数分组 依次拼接,得到生成置乱交流系数分组序列其中r”’为置乱交流系数分组 的序号;
A1.5、置乱交流系数生成:
最后,用户将置乱交流系数分组序列 中所有的交流系数与63-T个0,依次拼接,生成伪随机置乱系数 并通过下式得到置乱交流系
数C′n;
A2、系数置乱比特流生成:
对置乱交流系数C ′n进行熵编码,得到置乱交流系数熵编码并将第n个图像块熵编码ECSn中直流系数的熵编码DCC
A3、系数置乱熵编码异或加密:
在系数置乱比特流J′的第n个系数置乱熵编码ECS′n中,ECS′n={DCC
第n个系数置乱熵编码ECS′n中,提取直流系数置乱熵编码DCC
然后,将所有的块扩展位Ln依次拼接得到比特流扩展位L,L={L1,L2,...,Ln,...LN};用户使用加密密钥K1对比特流扩展位L按位异或加密,生成比特流扩展位密文L′,L′={L′1,L′2,...,L′n,...,L′N};
A4、比特流密文生成:
将第n个系数置乱熵编码ECS′n中的直流系数置乱霍夫曼编码DCH
然后,将系数置乱熵编码ECS′n中的交流系数的霍夫曼编码ACH
最后,将第n个系数置乱熵编码ECS′n中直流系数熵编码密文DCC′
将图像开始标记代码SOI,JPEG头文件JH,熵编码密文序列E″以及图像结束标记代码EOI依次拼接,得到比特流密文J″,J″={SOI,JH,ECS″1,ECS″2,...,ECS″N,EOI};
A5、图像块熵编码密文置乱:
在比特流密文J″中,用户根据加密密钥K1对熵编码密文序列E″中的图像块熵编码密文E CS ″n 进 行 伪随 机 置 乱 得到 初 始 块 置 乱熵 编 码 密 文 序列 E * ,并将图像开始标记符SOI,JPEG头文件JH,块置乱熵编码密文序列E*以及图像结束标记*
符EOI依次拼接,得到初始块置乱比特流J,A6、块置乱比特流生成:
在初始块置乱比 特流J*中 ,将 第n 个初始块置乱熵编码数据中的直流系数熵编码DCC
*
将所有初始块置乱熵编码数据 的直流系数Dn依次拼接,得到初始块置乱比特流J*的直流系数序列D,D={D1,D2,...,Dn,...DN};然后,对直流系数序列D进行差分脉冲调制编码,得到差分脉冲调制编码直流系数序列Dc,然后,将差分脉冲调制编码序列Dc中的直流系数 进行熵编码,得到初始块置乱直流*
系数熵编码 并替换初始块置乱熵编码数据 中的直流系数熵编码DCC ,得到块置乱熵编码 所
有的块置乱熵编码 依次拼接组成块置乱熵编码序列E1,最后,将图像开始标记代码SOI,JPEG头文件JH,块置乱熵编码序列E1以及图像结束标记代码EOI依次拼接,得到块置乱比特流J1, 并上传到云端;
B、信息隐藏:
在上传到云端的块置乱比特流J1中,云端根据直方图平移方法,将额外信息U分段在块置乱熵编码 中的交流系数 中,从前至后依次进行信息隐藏;分段隐藏额外信息后的块置乱熵编码 记为携密图像块熵编码
最后,将图像开始标记代码SOI,JPEG头文件JH,所有的携密图像块熵编码 以及图像结束标记代码EOI依次拼接,得到携密比特流Jm,C、信息提取:
在携密比特流Jm中,云端进行B步骤中的直方图平移方法的逆操作,提取出额外信息U,对携密比特流Jm中的交流系数进行恢复,得到置乱比特流J1;最后,云端将置乱比特流J1发送给接收者;
D、JPEG比特流解密:
D1、初始块置乱比特流恢复:
接收者首先在块置乱比特流J1中提取第n个块置乱熵编码 中的直流系数熵编码并进行熵解码,得到第n个块置乱熵编码数据 的直流系数然后,将所有的块置乱熵编码 的直流系数 进行拼接,得到块置乱比特流J1的差分脉冲调制编码直流系数序列Dc;
对差分脉冲调制编码直流系数序列Dc进行差分脉冲调制解码,得到初始块置乱比特流*
J的直流系数序列D,D={D1,D2,...,Dn,...DN};将第n个初始块置乱熵编码数据 的直流系数Dn进行熵编码,得到第n个初始块置乱熵编码数据 的直流系数熵编码DCC*
最后,将图像开始标记符SOI,JPEG头文件JH,初始块置乱熵编码密文序列E*以及图像结*束标记符EOI依次拼接,得到初始块置乱比特流J;
D2、置乱恢复比特流密文:
接收者根据加密密钥K1对初始块置乱比特流J*中初始熵编码密文序列E*,进行置乱恢复,得到图像块熵编码密文序列E″,E″={ECS″1,ECS″2,...,ECS″N};
并将图像开始标记符SOI,JPEG头文件JH,图像块熵编码密文序列E″以及图像结束标记符EOI依次拼接,恢复得到比特流密文J″,J″={SOI,JH,ECS″1,ECS″2,...,ECS″N,EOI};
D3、图像块熵编码密文异或解密:
在第n个图像块熵编码密文ECS″n中,将其中的直流系数的扩展位DCA′
接收者使用加密密钥K1对比特流扩展位密文L′按位异或解密,得到比特流扩展位L;
D4、系数置乱比特流恢复:
将第n个图像块熵编码密文ECS″n的直流系数的霍夫曼编码DCH 和块扩展位Ln中直流系数的扩展位DCA
然后,将第n个图像块熵编码密文ECS″n的交流系数的霍夫曼编码ACH
最后,将图像开始标记代码SOI,JPEG头文件JH,所有的图像块熵编码ECS′n以及图像结束标记代码EOI依次拼接,得到系数置乱比特流J′,J′={SOI,JH,ECS′1,ECS′2,...,ECS′N,EOI};
D5、交流系数置乱恢复:
将系数置乱比特流J′,J′={SOI,JH,ECS′1,ECS′2,...,ECS′N,EOI}替换为原始比特流J,J={SOI,JH,ECS1,ECS2,...,ECSn,...,ECSN,EOI},将替换后的原始比特流J进行A1.2步骤至A1.5步骤的操作得到第n个置乱交流系数C′n,最后,将第n个置乱交流系数C′n替换为第n个图像块熵编码ECSn的交流系数Cn;
D6、原始比特流恢复:
将D5步骤得到的第n个图像块熵编码ECSn的交流系数Cn进行霍夫曼编码,得到第n个图像块熵编码ECSn中交流系数的原始编码 并与第n个图像块熵编码ECSn中直流系数的熵编码DCC
将图像开始标记符SOI,JPEG头文件JH,所有的原始图像块熵编码ECSn以及图像结束标记符EOI依次拼接,得到原始比特流J,J={SOI,JH,ECS1,ECS2,…,ECSN,EOI}。