1.一种基于交流统计特征改变的JPEG图像比特流加密方法,包括如下步骤:A、JPEG图像比特流加密:
A1、数据读取:
用户读取大小为H0×W0的JPEG格式的图像X,获得图像X的原始比特流J,J={SOI,JH,ECS1,ECS2,…,ECSn,…,ECSN,EOI},其中:SOI为图像开始标记符,JH为JPEG头文件,EOI为图像的结束标记符,ECSn为图像X中的第n个图像块熵编码,N为图像块熵编码的个数,N=(H0×W0)/64;H0为图像X的行数、W0为图像X的列数;
图像X中的第n个图像块熵编码ECSn由第n个图像块熵编码的直流差分熵编码Cn,第n个图像块的非零交流系数熵编码集An,图像块熵编码结束标记符EOB组成,即ECSn={Cn,An,EOB};其中,是ECSn中第i个非零交流系数熵编码,In为第n个图像块熵编码中非零交流系数熵编码的个数;
将第一个至第N个图像块非零交流熵编码集A1,A2,…,An,…,AN,依次拼接组成原始比特流J的非零交流熵编码序列A,即A={A1,A2,…,An,…,AN};
A2、基于直方图平移的加密密钥自适应生成:A2.1、交流系数熵编码预处理:
用户根据直方图平移方法,计算原始比特流J的最大隐写容量Cmax,根据用户密钥Key选取隐写容量Ce使得Ce∈(0,Cmax);然后,基于用户密钥Key生成长度为F的伪随机序列Z,Z={z1,z2,…,zf,…,zF},其中zf伪随机序列Z中的第f个伪随机的整数,且zf∈(1,N);
找出非零交流熵编码序列A中的第n=zf个非零交流熵编码集 并提取出第zf个非零交流熵编码集 中的最后一个非零交流系数熵编码Bf,将所有的非零交流熵编码集 中的最后一个非零交流系数熵编码Bf依次拼接,组成长度为Ls的待隐藏比特流B, 其中Ls≤Ce;使用用户密钥Key加密待隐藏比特流B,得到的秘密信息S,Ls为秘密信息S的长度;
同时,得到预处理交流熵编码序列
A2.2、秘密信息隐藏:
用户采用直方图平移隐藏方法将长度为Ls的秘密信息S隐藏至预处理交流熵编码序列中,得到待加密交流熵编码序列 并将待加密交流熵编码序列 中隐藏秘密信息S所需要的交流熵编码集 的个数记为Ns;
A2.3、交流系数统计特征生成:
将第n个待加密交流熵编码集 中的非零交流系数熵编码的个数记为并将所有的待加密交流熵编码集 的非零交流系数熵编码的个数 依次拼接,得到待加密交流系数熵编码个数序列 然后,根据下式生成交流系数统计特征T,T={t0,t1,t2,…,tx,…,t63},其中,tx为交流系数熵编码个数 的值为x的统计特征值,其中sum(.)为在待加密交流系数熵编码个数序列 中,满足条件 的交流系数熵编码个数 的总数;
A2.4、直流系数和交流系数加密密钥生成:将用户密钥Key和交流系数统计特征T,分别作为混沌序列的种子和初值,由混沌序列生成自适应图像内容的直流加密密钥K1和交流加密密钥K2;
A3、直流加密:
用户将所有图像块熵编码ECSn中的直流差分熵编码C1,C2,…,Cn,…,CN组成原始比特流J的直流差分熵编码序列C,即:C={C1,C2,…,Cn,…,CN};
A3.1、计算直流系数序列:
根据JPEG解码标准,解码每个直流差分熵编码Cn,得到直流差分系数dfn,并将所有的直流差分系数dfn依次拼接,组成直流差分序列DF,即:DF={df1,df2,…,dfn,…,dfN},根据直流差分系数dfn,由下式计算得到直流系数dn,然后将所有的直流系数dn依次拼接得到原始比特流J中的直流系数序列D={d1,d2,…,dN},A3.2、直流系数分组置乱:
按照从左至右的顺序,将直流系数序列D分成H(H=H0/8)组,得到直流系数分组序列其中,Dh为直流系数分组序列 中的第h个直流系数分组,h=1,2,…,H;第h个直流系数分组Dh包含W(W=W0/8)个直流系数,分别为d(h-1)×W+1,hd(h-1)×W+2,…,dh×W,即D={d(h-1)×W+1,d(h-1)×W+2,…,dh×W};其中w={1,2,3,…,W},h={1,2,
3,…,H};
采用A2步生成的直流系数加密密钥K1,对直流系数分组序列 进行置乱,得到置乱直流系数分组序列 其中, 为置乱直流系数分组序列中的第h’个置乱直流系数分组;
将置乱直流系数分组序列 中的所有置乱直流系数分组 依次拼接,得到,其中, 为置乱直流系数分组序列 中的第n个置乱直流系数;
对置乱直流系数分组序列 中的第n个置乱直流系数 按下式进行计算,得到第n个置乱直流差分系数df′n,
将所有的置乱直流差分系数df′n,依次拼接得到分组置乱直流差分系数序列DF’,DF’={df′1,df′2,…,df′n,…,df′N}A3.3、差分编码迭代置乱:
根据直流系数加密密钥K1,对分组置乱直流差分系数序列DF’采用差分编码迭代置乱的加密方法进行加密,得到加密直流差分系数序列DF*,其中 为加密直流差分系数序列DF*中的第n个加密直流差分系数;
A3.4、直流系数加密熵编码序列的生成:
根据JPEG编码标准对加密的直流差分系数序列DF*中的第n个加密直流差分系数 进行编码,得到第n个图像块熵编码ECSn的直流系数加密熵编码 然后,将所有的直流系数加密熵编码 依次拼接,得到直流系数加密熵编码序列C*,A4、交流系数加密:
A4.1、块内置乱:
在A2.2步骤中生成的待加密交流熵编码序列 的,中,如果 采用交流系数加密密钥K2,置乱第n个待加密交流熵编码集 中的 个交流系数编码 得到块内置乱交流熵编码集A′n,其中 为第n个块内置乱交流熵编码集A′n中的第i个块内置乱交流系数编码否则,将待加密交流熵编码集 记为第n个块内置乱交流熵编码集A′n,即最后,按序拼接所有的块内置乱交流熵编码集A′n,得到原始比特流J的块内置乱交流熵编码序列A′,A′={A′1,A′2,…,A′n,…,A′N};
A4.2、块间置乱:
根据交流系数加密密钥K2,对原始比特流J的块内置乱交流熵编码序列A′进行伪随机置乱,得到加密交流熵编码序列A*, 其中 为第n个加密交流系数熵编码集;
A5、加密比特流生成:
用户将A3.4步骤得到的直流系数加密熵编码序列C*中第n个直流系数熵编码 A4.2步骤得到的加密交流熵编码序列A*中第n个加密交流熵编码集 和图像块结束熵编码结束标记符EOB,依次拼接,得到加密图像块熵编码然后,将图像开始标记符SOI,JPEG头文件JH,所有加密图像块熵编码 以及图像结束标记符EOI依次拼接,得到加密比特流J*,最后,用户将用户密钥Key,秘密信息S的长度Ls,隐藏秘密信息S所需要的交流熵编码集合的个数记Ns,依次拼接,记为密钥信息Ke,Ke=(Key||Ls||Ns),并将密钥信息Ke,以及加密比特流J*发送给接收者,其中||为串联符号;
B、JPEG比特流解密:
B1、加密密钥提取:
接收者提取接收到的加密比特流J*中的第n个加密图像块熵编码 进而提取出第n个加密图像块熵编码 中的第n个加密交流熵编码集 令第n个加密交流熵编码集并从密钥信息Ke中提取出用户密钥Key,然后进行A2.3、A2.4中的操作,得到直流系数加密密钥K1和交流系数加密密钥K2;
B2、交流系数解密:
B2.1、块间置乱恢复:
将所有的加密交流熵编码集 依次拼接,得到加密交流熵编码序列A*,根据交流系数加密密钥K2,对加密交流熵编码序列A*进行置乱恢复,得到原始比特流J的块内置乱交流熵编码序列A′,A′={A′1,A′2,…,A′n,…,A′N};
B2.2、块内置乱恢复:
在原始比特流J的块内置乱交流熵编码序列A′中,对每个块内置乱交流熵编码集A′n,如果I′n>1,用交流系数加密密钥K2置乱恢复块内置乱交流熵编码集A′n中的I′n个交流系数编码,得到待加密交流熵编码集否则,待加密交流熵编码集 最后,按序拼接
所有的待加密交流熵编码集 得到待加密交流熵编码序列B2.3、秘密信息提取:
接收者从密钥信息Ke中提取出秘密信息长度Ls,隐藏秘密信息S所需要的图像块熵编码个数Ns;
接收者对待加密交流熵编码序列 的前Ns个待加密交流熵编码集 采用直方图平移方法依次提取出二进制长度为Ls的秘密信息S,并得到预处理交流熵编码序列然后,使用用户密钥Key解密秘密信息S,得到隐藏信息B;
B2.4、图像块交流系数恢复:
将隐藏信息B根据JPEG标准进行交流系数解码,得到F个待隐藏交流熵编码B1,B2,…,Bf,…BF;
根据用户密钥Key生成长度为F的伪随机序列Z,Z={z1,z2,…,zf,…,zF},按照下式,对预处理交流熵编码序列 进行处理,得到非零交流熵编码集An;
依次拼接第n个图像块交流熵编码集An,组成非零交流熵编码序列A,即A={A1,A2,…,An,…,AN};
B3、直流系数解密:
B3.1、直流系数差分编码迭代置乱恢复:
接收者提取加密比特流J*中的第n个加密图像块熵编码 并提取第n个加密图像块熵编码 中的直流系数加密熵编码 然后,将所有的直流系数加密熵编码 依次拼接,得到直流系数加密熵编码序列C*,即
对直流系数加密熵编码序列C*进行JPEG解码,得到加密直流差分系数序列DF*,对加密直流差分系数序列DF*采用差分编码迭代置乱恢复的解密方法进行置乱恢复,得到分组置乱直流系数差分序列DF’,即DF’={df′1,df′2,…,df′n,…,df′N};
B3.2、直流系数分组:
对于分组置乱直流系数差分序列DF’,由下式计算得到置乱直流系数然后将所有的置乱直流系数 依次拼接得到原始比特流J中的直流系数置乱分组序列按照从左至右的顺序,将直流系数置乱分组序列 分成H(H=H0/8)个置乱直流系数分组 其中W=W0/8;进而得到置乱直流系数分组序列 为置乱直流系数分组序列 中的第h个置乱直流系数分组;
B3.3、直流系数组间置乱恢复:
根据直流加密密钥K1,以置乱直流系数分组 为单位,对置乱直流系数分组序列 进行伪随机置乱恢复,得到直流系数分组序列 其中,Dh为h
直流系数分组序列 中的第h个直流系数分组,将所有直流系数分组D 依次拼接,得到直流系数序列D,D={d1,d2,…,dn,…,dN};
B3.4、直流系数解密熵编码的生成:
将直流系数序列D中的第n个的直流系数dn,根据下式进行运算,并得到第n个图像块熵编码ECSn的直流差分系数dfn,根据JPEG编码标准对第n个图像块熵编码ECSn的直流差分系数dfn进行编码,得到第n个图像块熵编码ECSn的直流系数解密熵编码Cn;
B4、原始比特流恢复:
接收者将B3.4步骤得到的第n个图像块熵编码的直流系数解密熵编码Cn、B2.4步骤得到的第n个图像块的非零交流熵编码集An和图像块熵编码结束标记符EOB,依次拼接为原始比特流J中的第n个图像块熵编码ECSn,即ECSn={Cn,An,EOB},并将图像开始标记符SOI,JPEG头文件JH,第n个图像块熵编码ECSn以及图像结束标记符EOI依次拼接,得到原始比特流J,J={SOI,JH,ECS1,ECS2,…,ECSn,…,ECSN,EOI}。