1.一种基于拉丁方置乱的彩色图像加密方法,其特征在于,包含如下步骤:
步骤1.将大小为M×N的明文图像I分成R、G、B三个分量,利用该三个分量和外加密钥生成混沌系统参数和初始值,将混沌系统参数和初始值依次带入LLS混沌映射系统、SSS混沌映射系统和CCS混沌映射系统,得到混沌序列;根据混沌序列,获取用于置乱的序列组一和用于扩散的序列组二;
步骤2.利用序列组一构造三个拉丁方阵,分别对R、G、B三个分量进行分块置乱操作,得到大小为M×N的置乱矩阵R1、G1、B1;
步骤3.依次将置乱矩阵R1、G1、B1转换为大小为1×MN的矩阵R2、G2、B2;
步骤4.利用序列组二对矩阵R2进行扩散操作,得到大小为1×MN的扩散矩阵R3;基于序列组二和扩散矩阵R3对矩阵G2进行扩散操作,得到大小为1×MN扩散矩阵G3;基于序列组二和扩散矩阵G3对矩阵B2进行扩散操作,得到大小为1×MN扩散矩阵B3;
步骤5.依次将扩散矩阵R3、G3、B3转换为大小为M×N的矩阵R4、G4、B4;组合矩阵R4、G4、B4,得到密文图像C,完成加密;
一维混沌系统有Logistic映射xn+1=FL(u,xn)=u×xn×(1-xn)、Sine映射xn+1=FS(r,xn)=r×sin(π×xn)和Chebyshev映射xn+1=FC(a,xn)=cos(a×arccosxn),式中,u∈(0,4]、r∈(0,1),a∈N,且当a﹥1时,Chebyshev map具有混沌行为;利用两个相同一维混沌映射的输出序列的差值构造新的混沌系统,公式如下:xn+1=F(u,xn,k)=Fch(u,xn)×G(k)-floor(Fch(u,xn)×G(k)),其中,Fch(u,xn)是一维混沌映射,F(u,xn,k)是新得到的混沌映射,xn是混沌序列,n是迭代次数,G(k)=2k,8≤k≤20,且k值越大,其混沌性能越好,u的取值为(0,10],混沌系统的输出值范围为(0,1],利用Logistic映射、Sine映射、Chebyshev映射,根据公式得到三个新混沌系统:LLS混沌映射系统xn+1=u×xn×(1-xn)×2k-floor(u×xn×(1-xn)×2k),SSS混沌映射系统xn+1=u×sin(π×xn)×2k-floor(u×sin(π×xn)×2k)和CCS混沌映射系统xn+1=cos((u+1)×arccos(xn))×2k-floor(cos((u+1)×arccos(xn))×2k),式子中x0是初始值,n是迭代次数,u∈(0,10];
步骤1中,依据R、G和B三个分量中的元素,对应分量最大值和方差值,获取分量密钥r1、g1、b1;根据分量密钥计算得到混沌系统初始值x0和参数u0;将混沌系统初始值x0和参数u0,依次带入LLS混沌映射系统、SSS混沌映射系统和CCS混沌映射系统,分别迭代N0+MN次;并舍弃前N0个值,得到三个长度为1×MN的混沌序列X_l、X_s和X_c;根据混沌序列X_l、X_s和X_c,选取用于置乱的序列组一和用于扩散的序列组二;
选取用于置乱的序列组一,包含如下内容:
A1)从给定数字集合一中任取3个不同数字进行数字排列,得到大小为P1×3的排列矩阵final_result1;
A2)从排列矩阵final_result1中选取第value1行的3个值,分别赋值给ind1、ind2、ind3:,
得到互不相同的ind1、ind2、ind3,其中,value1=mod(floor((r1×b1+tg×t3+t2)×
1014),P1)+1,floor(x)表示取比x小的最大整数,tg、t2、t3为外加密钥,tg、t2、t3∈(0,+∞);
A3)将三个长度为1×MN的混沌序列X_l、X_s和X_c两两组合,得到6个混沌序列组,记为:X1=[X_l;X_s],X2=[X_c;X_l],X3=[X_s;X_c],
X4=[X_l;X_c],X5=[X_c;X_s],X6=[X_s;X_l];
A4)按照如下公式分别从X1-X6中选取用于置乱的序列组一CH_R1、CH_G1、CH_B1:选取用于扩散的序列组二,包含如下内容:
B1)从给定数字集合二中任取3个不同的数进行数字排列,得到大小为P2×3的排列矩阵final_result2;
B2)从排列矩阵final_result2中选取第value2行的3个值,分别赋值给ind4、ind5、ind6:,
2
得到互不相同的ind4、ind5、ind6,其中,value2=mod(floor((tb×g1×ind3+t3 +t2)×
1014),P2)+1tb为外加密钥,且tb∈(0,+∞);
B3)组合混沌序列X_l、X_s和X_c,得到3×MN的数组Ch2,Ch2=[X_l;X_s;X_c];根据如下公式分别选取用于扩散的序列组二CH_R2、CH_G2和CH_B2:步骤2中利用序列组一构造三个拉丁方阵,从混沌序列CH_R1中取出2个序列Q1=CH_R1(1,1:p2)和Q2=CH_R1(2,1:p2),构造p2阶拉丁方Lat_R:Lat_R=LatinG(Q1,Q2);并分别利用CH_G1、CH_B1构造p2阶拉丁方阵Lat_G、Lat_B。
2.根据权利要求1所述的基于拉丁方置乱的彩色图像加密方法,其特征在于,步骤2中的分块置乱操作,包含如下内容:步骤21)将各分量进行分块处理,分为p2块,每块大小为p×p,其中,
步骤22)从序列组一中取出2个序列,构造p2阶拉丁方阵Lat_R、Lat_G、Lat_B;
步骤23)若 则执行步骤24);否则,计数器初始化,执行步骤25);
步骤24)分别利用拉丁方阵Lat_R、Lat_G、Lat_B,对R、G、B分量进行相应置乱操作,得到置乱矩阵R1、G1、B1,进入步骤3;
步骤25)分别利用拉丁方阵Lat_R、Lat_G、Lat_B,对R、G、B各分量进行置乱操作,得到相应置乱矩阵,计数器累加计数;
步骤26)判断计数器数值是否达到设定阈值,若达到,则将步骤25)最新得到的各分量的置乱矩阵,记为置乱矩阵R1、G1、B1,并进入步骤3;否则,将步骤25)最新得到的各分量的置乱矩阵顺时针旋转,并返回步骤25)循环执行。
3.根据权利要求1所述的基于拉丁方置乱的彩色图像加密方法,其特征在于,步骤4具体包含如下内容:步骤41)利用外加密钥和三分量的置乱矩阵计算各分量的中间密钥sumR_a、sumG_a、sumB_a;
步骤42)修正序列组二中的每个元素,得到序列CH_R3、CH_G3、CH_B3;
步骤43)对矩阵R2中的每个像素进行扩散操作,得到扩散后的矩阵R3;
步骤44)利用矩阵R3对矩阵G2进行预处理操作,然后对矩阵G2中的每个像素进行扩散操作,得到扩散后的矩阵G3;
步骤45)利用矩阵G3对矩阵B2进行预处理操作,然后对矩阵B2中的每个像素进行扩散操作,得到扩散后的矩阵B3。
4.根据权利要求3所述的基于拉丁方置乱的彩色图像加密方法,其特征在于,步骤41中,利用外加密钥和三分量的置乱矩阵计算各分量的中间密钥sumR_a、sumG_a、sumB_a,其中计算R分量的中间密钥sumR_a的公式表示为:,
计算中间密钥sumG_a、sumB_a时,分别将公式中的R2(i)和tr依次替换成G2(i)和tg、B2(i)和tb,其中,ind1、ind2分别为序列组一中的赋值变量,t2、tr、tg、tb均为外加密钥,且t2、tr、tg、tb∈(0,+∞)。
5.根据权利要求3所述的基于拉丁方置乱的彩色图像加密方法,其特征在于,步骤42)中,序列组二中序列CH_R2、CH_G2、CH_B2的每一个元素的修正公式表示为:,
其中,CH_R2(i)、CH_G2(i)、CH_B2(i)、CH_R3(i)、CH_G3(i)和CH_B3(i)分别表示序列CH_R2、CH_G2、CH_B2、CH_R3、CH_G3和CH_B3的第i个元素,i=1,2,….,MN。
6.根据权利要求5所述的基于拉丁方置乱的彩色图像加密方法,其特征在于,步骤43中扩散操作包含如下内容:首先利用公式对矩阵R2的第一个像素进行扩散,扩散公式表示为得到扩散后的像素值R3(1),其中,t3、t4为外加密钥,且t3∈(0,+∞)、t4∈(20,+∞),sumR_a为获取的中间密钥,r1是获取的分量密钥;然后,利用公式:R3(i)=CH_R3(i)⊕R2(i)⊕R3(kr),kr=floor(mod((R3(i-1)+CH_R3(i)+i),256)/256×(i-1))+1,对矩阵R2的第i个像素进行扩散,2≤i≤MN,直至i=MN,完成扩散操作,得到扩散后的矩阵R3。
7.根据权利要求6所述的基于拉丁方置乱的彩色图像加密方法,其特征在于,步骤44)中利用矩阵R3对矩阵G2进行预处理操作,即:利用矩阵R3的最后一个像素去影响矩阵G2的第一个像素,公式表示为G2(1)=G2(1)⊕R3(MN);然后将矩阵R2的扩散公式中的sumR_a、r1、CH_R3、R2换成sumG_a、g1、CH_G3、G2,对矩阵G2分量的第一个像素进行扩散,得到扩散后的像素值G3(1),接着,扩散矩阵G2分量的第i个像素,2≤i≤MN,得到矩阵G3,其中,kg=ceil(mod((G3(i-1)+CH_G3(i)+i),256)/256×(i-1))+1,G3(i)=CH_G3(i)⊕G2(i)⊕G3(kg);步骤45)中,利用矩阵G3的最后一个像素去影响矩阵B2的预处理操作表示为:B2(1)=B2(1)⊕G3(MN),然后将矩阵R2的扩散公式中的sumR_a、r1、CH_R3、R2换成sumB_a、b1、CH_B3、B2,扩散矩阵B2的第一个像素,得到像素值B3(1),接着,对矩阵B2的第i个像素进行扩散,2≤i≤MN,得到矩阵B3,其中,kb=ceil(mod((B3(i-1)+CH_B3(i)+i),256)/256×(i-1))+1,B3(i)=CH_B3(i)⊕B2(i)⊕B3(kb)。