发明内容
本发明提供一种基于索引矩阵的图像加密方法、装置、终端及存储介质,可以解决图像加密方法存在运算量大、运算复杂等问题。
根据本发明实施例的第一方面,提供一种基于索引矩阵的图像加密方法,所述方法包括加密过程和解密过程两个部分;
所述加密过程包括:
获取待加密图像的像素值矩阵,获取由预设密码转化的第一初值x0、第二初值μ以及总加密次数T,根据所述第一初值x0、第二初值μ记忆下述公式Logistic映射(1),生成一个长度为256且各元素互不相等的随机序列:
xk+1=μxk(1-xk) (1)
其中,3.569945≤μ≤4,xk∈[0,1];
根据生成的序列生成索引矩阵;
基于所述总加密次数T、第一初值x0、第二初值μ以及公式(1),生成加密步长矩阵,通过所述加密步长矩阵以及所述索引矩阵对待加密图像的像素值矩阵进行加密,得到加密后的像素值矩阵;
基于所述第一初值x0、第二初值μ以及公式(1),生成像素扩散矩阵,根据所述像素扩散矩阵对所述加密后的像素值矩阵进行像素扩散,得到加密图像;
所述解密过程包括:
获取加密图像的像素值矩阵,获取由预设密码转化的第一初值x0、第二初值μ以及总加密次数T,根据所述第一初值x0、第二初值μ以及上述公式(1),生成一个长度为256且各元素互不相等的序列;
根据生成的序列生成索引矩阵;
基于所述总加密次数T、第一初值x0、第二初值μ以及公式(1),生成加密步长矩阵;
基于所述第一初值x0、第二初值μ以及公式(1),生成像素扩散矩阵;
通过所述像素扩散矩阵以及所述加密图像,得到所述像素扩散前的加密图像的像素值矩阵;
通过所述加密步长矩阵对所述像素扩散前的加密图像的像素值矩阵进行解密,得到加密前的原始图像。
可选地,所述根据生成的序列生成索引矩阵,包括:
通过对去重后的随机序列排序,并按序记录各元素在排序前的位置编号值,得到一个长度为256、各元素互不相同、且恰好能填充满0~255区间的、由所述位置编号值组成的正整数序列,将得到的正整数序列转换为尺寸为10×26大小索引矩阵的前256位,后4位由不属于0~255的任意指定值进行填充。
可选地,所述基于所述总加密次数T、第一初值x0、第二初值μ以及公式(1),生成加密步长矩阵,包括:
选取t,其中,t为1:T内的随机数(1≤t≤T),
采用上述公式(1)生成一个长为m×n的序列T′,对T′作如下述公式(2)(3)的变换:
T″=mod(fix(T′(i)×1000),T′)+1,1≤i≤m×n则:1≤T′≤t; (2)
S=reshape(T″,m,n)1≤S(i,j)≤t,1≤i≤m,1≤j≤n; (3)
其中,S即为所述索引矩阵对应的加密步长矩阵,m、n为所述待加密图像的像素尺寸;fix()表示向0取整,mod()取模运算,reshape()是重新调整矩阵中元素的行数、列数、维数的运算。
可选地,所述通过所述加密步长矩阵以及所述索引矩阵对所述待加密图像的像素值矩阵进行加密,得到加密后的像素值矩阵,包括:
将所述像素值矩阵中的每个元素转化为三位数;
对于所述待加密图像的像素值矩阵中任一元素,将所述元素进行数值分解为第一数值以及第二数值,其中,所述第一数值为所述三位数的元素的前两位数值,所述第二数值为所述三位数的元素的最后一位数值,将所述第一数值与所述第二数值确定为所述元素的行序号以及列序号,根据所述元素的行序号与列序号,在所述索引矩阵中查找所述元素对应的加密元素,此为完成元素的一次加密,在所述加密步长矩阵中确定所述像素值矩阵的元素对应的加密步长元素,根据所述加密步长元素对所述像素值矩阵中的元素进行加密;
当根据所述加密步长矩阵对所述像素值矩阵中的每个元素均完成加密后,得到的矩阵即为加密后的像素值矩阵。
可选地,所述将所述元素进行数值分解为第一数值以及第二数值,包括:
设A(i,j)为所述像素值矩阵中的一个元素,将A(i,j)的第一数值设为row,第二数值记为col,按照下述公式(4)(5)分别得到row以及col:
式中:rem(x,y)为取余运算,rem(x,y)=x-y×fix(x/y),fix()表示向0取整。
可选地,所述基于所述第一初值x0、第二初值μ以及公式(1),生成像素扩散矩阵,根据所述像素扩散矩阵对所述加密后的像素值矩阵进行像素扩散,得到加密图像,包括:
采用第一初值x0、第二初值μ以及上述公式(1)生成一个长为m×n的随机序列Q,按照下述公式(6)(7)将所述Q转化为m×n大小的像素扩散矩阵Q′:
Q=mod(fix(T(i)×1000),256) (6)
Q′=reshape(Q,m,n) (7)
按照下述公式(8)根据所述像素扩散矩阵对所述加密后的像素值矩阵进行像素扩散,得到加密图像:
其中,1≤i≤m×n;0≤Q≤255;1≤Q′(i,j)≤t;1≤i≤m;1≤j≤n;C为得到的加密后的像素值矩阵对应的图像;为C′像素扩散后得到的加密图像。
根据本发明实施例的第二方面,提供一种基于索引矩阵的图像加密装置,包括:
所述装置包括加密模块和解密模块两个部分;
所述加密模块,用于:
获取待加密图像的像素值矩阵,获取由预设密码转化的第一初值x0、第二初值μ以及总加密次数T,根据所述第一初值x0、第二初值μ记忆下述公式Logistic映射(1),生成一个长度为256且各元素互不相等的随机序列:
xk+1=μxk(1-xk) (1)
其中,3.569945≤μ≤4,xk∈[0,1];
根据生成的序列生成索引矩阵;
基于所述总加密次数T、第一初值x0、第二初值μ以及公式(1),生成加密步长矩阵,通过所述加密步长矩阵以及所述索引矩阵对待加密图像的像素值矩阵进行加密,得到加密后的像素值矩阵;
基于所述第一初值x0、第二初值μ以及公式(1),生成像素扩散矩阵,根据所述像素扩散矩阵对所述加密后的像素值矩阵进行像素扩散,得到加密图像;
所述解密模块,用于:
获取加密图像,获取由预设密码转化的第一初值x0、第二初值μ以及总加密次数T,根据所述第一初值x0、第二初值μ以及上述公式(1),生成一个长度为256且各元素互不相等的序列;
根据生成的序列生成索引矩阵;
基于所述总加密次数T、第一初值x0、第二初值μ以及公式(1),生成加密步长矩阵;
基于所述第一初值x0、第二初值μ以及公式(1),生成像素扩散矩阵;
通过所述像素扩散矩阵以及所述加密图像像素值矩阵,得到所述像素扩散前的加密图像像素值矩阵;
通过所述加密步长矩阵对所述像素扩散前的加密图像像素值矩阵进行解密,得到加密前的原始图像。
可选地,所述加密模块,用于:
通过对去重后的随机序列排序,并按序记录各元素在排序前的位置编号值,得到一个长度为256、各元素互不相同、且恰好能填充满0~255区间的、由所述位置编号值组成的正整数序列,将得到的正整数序列转换为尺寸为10×26大小索引矩阵的前256位,后4位由不属于0~255的任意指定值进行填充。
可选地,所述加密模块,用于:
选取t,其中,t为1:T内的随机数(1≤t≤T),
采用上述公式(1)生成一个长为m×n的序列T′,对T′作如下述公式(2)(3)的变换:
T″=mod(fix(T′(i)×1000),T′)+1,1≤i≤m×n则:1≤T′≤t; (2)
S=reshape(T″,m,n)1≤S(i,j)≤t,1≤i≤m,1≤j≤n; (3)
其中,S即为所述像素值矩阵对应的加密步长矩阵,m、n为所述待加密图像的像素尺寸;fix()表示向0取整,mod()取模运算,reshape()是重新调整矩阵中元素的行数、列数、维数的运算。
可选地,所述加密模块,用于:
将所述像素值矩阵中的每个元素转化为三位数;
对于所述待加密图像的像素值矩阵中任一元素,将所述元素进行数值分解为第一数值以及第二数值,其中,所述第一数值为所述三位数的元素的前两位数值,所述第二数值为所述三位数的元素的最后一位数值,将所述第一数值与所述第二数值确定为所述元素的行序号以及列序号,根据所述元素的行序号与列序号,在所述索引矩阵中查找所述元素对应的加密元素,此为完成元素的一次加密,在所述加密步长矩阵中确定所述像素值矩阵的元素对应的加密步长元素,根据所述加密步长元素对所述像素值矩阵中的元素进行加密;
当根据所述加密步长矩阵对所述像素值矩阵中的每个元素均完成加密后,得到的矩阵即为加密后的像素值矩阵。
可选地,所述加密模块,用于:
设A(i,j)为所述索引矩阵中的一个元素,将A(i,j)的第一数值设为row,第二数值记为col,按照下述公式(4)(5)分别得到row以及col:
式中:rem(x,y)为取余运算,rem(x,y)=x-y×fix(x/y),fix()表示向0取整。
可选地,所述加密模块,用于:
采用第一初值x0、第二初值μ以及上述公式(1)生成一个长为m×n的随机序列Q,按照下述公式(6)(7)将所述Q转化为m×n大小的像素扩散矩阵Q′:
Q=mod(fix(T(i)×1000),256) (6)
Q′=reshape(Q,m,n) (7)
按照下述公式(8)根据所述像素扩散矩阵对所述加密后的像素值矩阵进行像素扩散,得到加密图像:
其中,1≤i≤m×n;0≤Q≤255;1≤Q′(i,j)≤t;1≤i≤m;1≤j≤n;C为得到的加密后的像素值矩阵对应的图像;为C′像素扩散后得到的加密图像。
根据本发明实施例的第三方面,提供一种终端,包括:
一个或多个处理器;
用于存储所述一个或多个处理器可执行指令的存储器;
其中,所述一个或多个处理器被配置为:
执行本发明实施例的第一方面所述的方法。
根据本发明实施例的第四方面,提供一种非临时性计算机可读存储介质,当所述存储介质中的指令由终端的处理器执行时,使得终端能够执行本发明实施例的第一方面所述的方法。
根据本发明实施例的第五方面,提供一种应用程序产品,当应用程序产品在终端在运行时,使得终端执行本发明实施例的第一方面所述的方法。
本发明的实施例提供的技术方案可以包括以下有益效果:
(1)利用低维混沌序列构建一个大小为10×26的索引矩阵,索引矩阵的行号和列号恰好能组成图像的256个灰度级,利用索引矩阵行号、列号的组合与分解,直接在索引矩阵中进行查值替换,便能实现图像的加密与解密。
(2)构造的索引矩阵,运算量小,生成速度快,随机性强,且加密过程不需要复杂数学运算,主要依赖行号与号列组合与分解查表即可完成,可以极大提高加解密速度,有明显的效率优势。
(3)该方法通过性强,适合于任意大小、任意比例、任意格式由256个灰度级构成的图像。
(4)混沌系统与索引矩阵的结合发挥了混沌的强安全性和大密钥空间特性,也兼顾了运行效率,通过简单的操作和低的处理负载,便得到一种高安全性、高效的图像加密算法。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
图1是根据一示例性实施例示出的一种基于索引矩阵的图像加密方法的流程图,如图1所示,该方法用于终端中,该方法包括加密过程和解密过程两个部分;
加密过程包括:
步骤101、获取待加密图像的像素值矩阵,获取由预设密码转化的第一初值x0、第二初值μ以及总加密次数T,根据第一初值x0、第二初值μ记忆下述公式Logistic映射(1),生成一个长度为256且各元素互不相等的随机序列:
xk+1=μxk(1-xk) (1)
其中,3.569945≤μ≤4,xk∈[0,1];
步骤102、根据生成的序列生成索引矩阵;
步骤103、基于总加密次数T、第一初值x0、第二初值μ以及公式(1),生成加密步长矩阵,通过加密步长矩阵以及索引矩阵对待加密图像的像素值矩阵进行加密,得到加密后的像素值矩阵;
步骤104、基于第一初值x0、第二初值μ以及公式(1),生成像素扩散矩阵,根据像素扩散矩阵对加密后的像素值矩阵进行像素扩散,得到加密图像;
解密过程包括:
步骤105、获取加密图像,获取由预设密码转化的第一初值x0、第二初值μ以及总加密次数T,根据第一初值x0、第二初值μ以及上述公式(1),生成一个长度为256且各元素互不相等的序列;
步骤106、根据生成的序列生成索引矩阵;
步骤107、基于总加密次数T、第一初值x0、第二初值μ以及公式(1),生成加密步长矩阵;
步骤108、基于第一初值x0、第二初值μ以及公式(1),生成像素扩散矩阵;
步骤109、通过像素扩散矩阵以及加密图像的像素值矩阵,得到像素扩散前的加密图像的像素值矩阵;
步骤110通过加密步长矩阵对像素扩散前的加密图像的像素值矩阵进行解密,得到加密前的原始图像。
可选地,根据生成的序列生成索引矩阵,包括:
通过对去重后的随机序列排序,并按序记录各元素在排序前的位置编号值,得到一个长度为256、各元素互不相同、且恰好能填充满0~255区间的、由所述位置编号值组成的正整数序列,将得到的正整数序列转换为尺寸为10×26大小索引矩阵的前256位,后4位由不属于0~255的任意指定值进行填充。
可选地,基于总加密次数T、第一初值x0、第二初值μ以及公式(1),生成加密步长矩阵,包括:
选取t,其中,t为1:T内的随机数(1≤t≤T),
采用上述公式(1)生成一个长为m×n的序列T′,对T′作如下述公式(2)(3)的变换:
T″=mod(fix(T′(i)×1000),T′)+1,1≤i≤m×n则:1≤T′≤t; (2)
S=reshape(T″,m,n)1≤S(i,j)≤t,1≤i≤m,1≤j≤n; (3)
其中,S即为索引矩阵对应的加密步长矩阵,m、n为待加密图像的像素尺寸;fix()表示向0取整,mod()取模运算,reshape()是重新调整矩阵中元素的行数、列数、维数的运算。
可选地,通过加密步长矩阵以及索引矩阵对待加密图像的像素值矩阵进行加密,得到加密后的像素值矩阵,包括:
将像素值矩阵中的每个元素转化为三位数;
对于待加密图像的像素值矩阵中任一元素,将元素进行数值分解为第一数值以及第二数值,其中,第一数值为三位数的元素的前两位数值,第二数值为所述三位数的元素的最后一位数值,将第一数值与第二数值确定为元素的行序号以及列序号,根据元素的行序号与列序号,在索引矩阵中查找元素对应的加密元素,此为完成元素的一次加密,在加密步长矩阵中确定像素值矩阵的元素对应的加密步长元素,根据加密步长元素对像素值矩阵中的元素进行加密;
当根据加密步长矩阵对像素值矩阵中的每个元素均完成加密后,得到的矩阵即为加密后的像素值矩阵。
可选地,将元素进行数值分解为第一数值以及第二数值,包括:
设A(i,j)为索引矩阵中的一个元素,将A(i,j)的第一数值设为row,第二数值记为col,按照下述公式(4)(5)分别得到row以及col:
式中:rem(x,y)为取余运算,rem(x,y)=x-y×fix(x/y),fix()表示向0取整。
可选地,基于第一初值x0、第二初值μ以及公式(1),生成像素扩散矩阵,根据像素扩散矩阵对加密后的像素值矩阵进行像素扩散,得到加密图像,包括:
采用第一初值x0、第二初值μ以及上述公式(1)生成一个长为m×n的随机序列Q,按照下述公式(6)(7)将Q转化为m×n大小的像素扩散矩阵Q′:
Q=mod(fix(T(i)×1000),256) (6)
Q′=reshape(Q,m,n) (7)
按照下述公式(8)根据像素扩散矩阵对加密后的像素值矩阵进行像素扩散,得到加密图像:
其中,1≤i≤m×n;0≤Q≤255;1≤Q′(i,j)≤t;1≤i≤m;1≤j≤n;C为得到的加密后的像素值矩阵对应的图像;为C′像素扩散后得到的加密图像。
本发明的实施例中:
(1)利用低维混沌序列构建一个大小为10×26的索引矩阵,索引矩阵的行号和列号恰好能组成图像的256个灰度级,利用索引矩阵行号、列号的组合与分解,直接在索引矩阵中进行查值替换,便能实现图像的加密与解密;
(2)构造的索引矩阵,运算量小,生成速度快,随机性强,且加密过程不需要复杂数学运算,主要依赖行号与号列组合与分解查表即可完成,可以极大提高加解密速度,有明显的效率优势。
(3)该方法通过性强,适合于任意大小、任意比例、任意格式由256个灰度级构成的图像.
(4)混沌系统与索引矩阵的结合发挥了混沌的强安全性和大密钥空间特性,也兼顾了运行效率,通过简单的操作和低的处理负载,便得到一种高安全性、高效的图像加密算法。
图2是根据一示例性实施例示出的一种基于索引矩阵的图像加密方法的流程图,如图2所示,该方法用于终端中,本实施例以图像加密的流程进行说明,包括以下步骤。
步骤201、获取待加密图像的像素值矩阵,获取由预设密码转化的第一初值x0、第二初值μ以及总加密次数T,根据第一初值x0、第二初值μ记忆下述公式Logistic映射(1),生成一个长度为256且各元素互不相等的随机序列:
xk+1=μxk(1-xk) (1)
其中,3.569945≤μ≤4,xk∈[0,1]。
其中,Logistic映射具有确定性、伪随机性、既非周期又不收敛性、初值敏感性、不可预测性、产生速度快等特性,保证了序列生成的随机性和安全性,对此很多文献有过详细研究,在此不再赘述。
步骤202、通过对去重后的随机序列排序,并按序记录各元素在排序前的位置编号值,得到一个长度为256、各元素互不相同、且恰好能填充满0~255区间的、由位置编号值组成的正整数序列,将得到的正整数序列转换为尺寸为10×26大小索引矩阵的前256位,后4位由不属于0~255的任意指定值进行填充。
一种可行的实施方式中,根据上述公式(1),生成一个长度为256且各元素互不相等的序列Poriginal,即:当i≠j时,Pi≠Pj,i,j∈[1,256]。
对上述生成的序列Poriginal进行排序,将排序后的序列记为Prank,即:Prank=Rank(Poriginal),如果用i和j(i∈[0,255],j∈[0,255])分别表示同一数值在序列Poriginal和Prank中的位置编号,则对于任意i均有唯一的j与其一一对应,按照i从小到大的顺序,依次找出所有对应的j,并将此序列记为Pend,显然j∈[0,255],且Pend中各元素均为连续区间0:255中的整数,不遗漏,也不重复。
然后,将排序后的序列Pend改写为26×10或10×26大小的矩阵,记为M,
即:M=reshape(Pend,10,26),M即为满足以下三个条件的索引矩阵:
1)索引矩阵M的大小为26×10或10×26,至少能容纳256个值;
2)索引矩阵M中的所有元素M(i,j),必须为0:255间的整数(含0和255),即:M(i,j)∈[0,255];
3)索引矩阵M中的所有元素M(i,j)互不相等,且有256个值恰好覆盖满0:255这个连续区间.
将矩阵的行序号记为:0,1,2,…,9,列序号记为:00,01,02,…,25。如下表1所示为μ=3.95,x0=0.32568时,生成的10×26的索引矩阵M。
表1
|
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
0 |
91 |
112 |
182 |
176 |
191 |
29 |
207 |
35 |
57 |
87 |
116 |
56 |
206 |
61 |
80 |
45 |
90 |
253 |
130 |
6 |
63 |
223 |
22 |
228 |
255 |
38 |
1 |
172 |
202 |
46 |
21 |
54 |
121 |
2 |
164 |
189 |
162 |
64 |
66 |
251 |
158 |
218 |
136 |
171 |
181 |
1 |
216 |
160 |
144 |
79 |
180 |
210 |
246 |
2 |
17 |
214 |
98 |
219 |
49 |
133 |
110 |
212 |
52 |
236 |
235 |
193 |
224 |
83 |
20 |
239 |
16 |
226 |
139 |
122 |
85 |
25 |
19 |
197 |
5 |
78 |
3 |
77 |
4 |
196 |
81 |
148 |
33 |
140 |
238 |
123 |
65 |
161 |
43 |
145 |
53 |
175 |
11 |
244 |
198 |
242 |
30 |
149 |
102 |
174 |
99 |
215 |
18 |
4 |
245 |
209 |
179 |
59 |
84 |
129 |
153 |
135 |
119 |
187 |
86 |
237 |
26 |
190 |
94 |
71 |
154 |
100 |
14 |
126 |
50 |
60 |
93 |
47 |
203 |
173 |
5 |
37 |
254 |
227 |
101 |
159 |
131 |
243 |
44 |
31 |
117 |
150 |
163 |
128 |
40 |
8 |
213 |
141 |
48 |
74 |
204 |
55 |
157 |
177 |
183 |
113 |
92 |
6 |
155 |
72 |
199 |
24 |
62 |
27 |
15 |
194 |
127 |
106 |
107 |
88 |
32 |
248 |
68 |
201 |
229 |
147 |
34 |
186 |
192 |
82 |
96 |
138 |
231 |
— |
7 |
142 |
12 |
69 |
222 |
104 |
146 |
170 |
67 |
205 |
234 |
118 |
169 |
120 |
221 |
178 |
165 |
111 |
184 |
256 |
105 |
42 |
39 |
10 |
241 |
167 |
— |
8 |
166 |
240 |
9 |
249 |
185 |
225 |
89 |
7 |
108 |
115 |
51 |
152 |
124 |
23 |
195 |
36 |
3 |
28 |
211 |
114 |
168 |
247 |
70 |
13 |
143 |
— |
9 |
230 |
137 |
95 |
41 |
125 |
252 |
75 |
217 |
151 |
233 |
188 |
109 |
103 |
58 |
97 |
76 |
208 |
132 |
134 |
232 |
250 |
220 |
200 |
73 |
156 |
— |
步骤203、基于总加密次数T、第一初值x0、第二初值μ以及公式(1),生成加密步长矩阵。
一种可行的实施方式中,先选取一个t,其中,t为1:T内的随机数(1≤t≤T);
采用上述公式(1)生成一个长为m×n的序列T′,对T′作如下述公式(2)(3)的变换:
T″=mod(fix(T′(i)×1000),T′)+1,1≤i≤m×n 1≤T′≤t; (2)
S=reshape(T″,m,n)1≤S(i,j)≤t,1≤i≤m,1≤j≤n; (3)
其中,S即为索引矩阵对应的加密步长矩阵,m、n为待加密图像的像素尺寸;fix()表示向0取整,mod()取模运算,reshape()是重新调整矩阵中元素的行数、列数、维数的运算。
步骤204、通过加密步长矩阵对待加密图像的像素值矩阵进行加密,得到加密后的像素值矩阵。
一种可选的实施方式中,该步骤204可包括下述步骤2041-2044:
步骤2041、将像素值矩阵中的每个元素转化为三位数。
其中,所述第一数值为所述三位数的元素的前两位数值,所述第二数值为所述三位数的元素的最后一位数值。
具体地,如果像素值矩阵中的元素原本就是三位数,则可以不做任何更改,如果元素原本是两位数或者一位数,则通过前面补0的方法确保索引矩阵中的每个元素均为三位数,如:000,001,002,…,254,255。
步骤2042、对于像素值矩阵中任一元素,将元素进行数值分解为第一数值以及第二数值。
具体地,设A(i,j)为像素值矩阵中的一个元素,将A(i,j)的第一数值设为row,第二数值记为col,按照下述公式(4)(5)分别得到row以及col:
式中:rem(x,y)为取余运算,rem(x,y)=x-y×fix(x/y),fix()表示向0取整。
这样分解后,通常将三位数的元素的前两位分解为第一数值,将三位数的元素的最后一位分解为第二数值,举例来讲,如果元素为148,则该元素对应的第一数值为14,第二数值为8。
步骤2043、将第一数值与第二数值确定为元素的行序号以及列序号,根据元素的行序号与列序号,在索引矩阵中查找元素对应的加密元素,此为完成元素的一次加密,在加密步长矩阵中确定像素值矩阵的元素对应的加密步长元素,根据加密步长元素对像素值矩阵中的元素进行加密。
具体地,举例来讲,如图3所示,像素值A(i,j)=8,先根据步骤2051通过前面补0法补足三位,得到A(i,j)=008,再根据步骤2052通过数值分解可知:第一数值row=00,第二数值col=8,在索引矩阵M′中查找行数为00、列数为8的元素,得到M′(00,8)=166,也就是说:像素值8通过一次加密后得到的值为166。
根据上述步骤,可以完成一次图像加密,如果把一次加密后生成的图像再看作是原始图像,重复一次上述方法,就可以得到二次加密图像C2,以此类推,可以到加密图像C3、C4、C5……,如图所示。由此可以发现一个问题,对于原始图像中相同的像素值,每轮加密后得到的结果均是相同的,也就预示着:原始图像中相同的像素值,经过多次加密后得到的结果依然是相同的,这对于图像加密是一种安全隐患,一个好的图像加密方法应尽可能破坏像素间的相关性,为此,通过上述步骤204生成的加密步长矩阵来解决该问题。
加密步长矩阵的大小与待加密图像的像素大小保持相同,待加密图像的每个像素值在加密步长矩阵中都有一个对应的加密步长元素,这样,当出现有像素值相同的情况,由于两个相同的像素值对应的加密步长不同,加密后得到的加密元素也不同。举例来讲,如图4所示,当两个像素值均为8时,由于数值分解导致两个像素值对应的第一数值均为00,第二数值均为8,在索引矩阵中查到的第一次加密元素均为166,但一个像素值的加密步长为1,一个像素值的加密步长为3,加密步长为3的像素值会在第一次加密元素的基础上继续数值分解、在索引矩阵中查找第二次加密元素229,继续对第二次加密元素229进行数值分解、在索引矩阵中查找第三次加密元素200,查找到的第三次加密元素200才是该像素值对应的加密元素,由此可以看出,相同的像素值拥有不同的加密步长后,得到的加密元素是不同的。
步骤2044、当根据加密步长矩阵对像素值矩阵中的每个元素均完成加密后,得到的矩阵即为加密后的像素值矩阵。
步骤205、基于第一初值x0、第二初值μ以及公式(1),生成像素扩散矩阵,根据像素扩散矩阵对加密后的索引矩阵进行像素扩散,得到加密图像。
一种可选的实施方式中,该步骤包括以下步骤2051-2052:
步骤2051、采用第一初值x0、第二初值μ以及上述公式(1)生成一个长为m×n的随机序列Q,按照下述公式(6)(7)将Q转化为m×n大小的像素扩散矩阵Q′:
Q=mod(fix(T(i)×1000),256) (6)
Q′=reshape(Q,m,n) (7)
步骤2052、按照下述公式(8)根据像素扩散矩阵对加密后的索引矩阵进行像素扩散,得到加密图像:
其中,1≤i≤m×n;0≤Q≤255;1≤Q′(i,j)≤t;1≤i≤m;1≤j≤n;C为得到的加密后的像素值矩阵对应的图像;为C′像素扩散后得到的加密图像。
这样,在上述步长控制下索引矩阵加密的结果上,再进行一次像素扩散,主要是为了在密文图像上再散播明文图像,进一步改变密文图像的统计特性,防止攻击者通过成对的明文与密文比较,获取到有价值的信息,进而破解加密系统,进一步加强了图像的保密性。
基于上述步骤201-步骤205,采用是大小为512×512的标准灰度图像作为实验图像,在Windows10和Matlab2018平台上进行了仿真实验,结果如图5所示。
本发明的实施例中:
(1)利用低维混沌序列构建一个大小为10×26的索引矩阵,索引矩阵的行号和列号恰好能组成图像的256个灰度级,利用索引矩阵行号、列号的组合与分解,直接在索引矩阵中进行查值替换,便能实现图像的加密与解密;
(2)构造的索引矩阵,运算量小,生成速度快,随机性强,且加密过程不需要复杂数学运算,主要依赖行号与号列组合与分解查表即可完成,可以极大提高加解密速度,有明显的效率优势。
(3)该方法通过性强,适合于任意大小、任意比例、任意格式由256个灰度级构成的图像.
(4)混沌系统与索引矩阵的结合发挥了混沌的强安全性和大密钥空间特性,也兼顾了运行效率,通过简单的操作和低的处理负载,便得到一种高安全性、高效的图像加密算法。
图6是根据一示例性实施例示出的一种基于索引矩阵的图像加密方法的流程图,如图6所示,该方法用于终端中,本实施例以图像解密的流程进行说明,包括以下步骤。
步骤601、获取加密图像,获取由预设密码转化的第一初值x0、第二初值μ以及总加密次数T,根据第一初值x0、第二初值μ以及上述公式(1),生成一个长度为256且各元素互不相等的序列。
一种可行的实施方式中,具有查看加密图像权限的用户获得密码后,可以将密码转化为第一初值x0、第二初值μ以及总加密次数T,生成序列的方式请参照上述步骤201,此处不作赘述。
步骤602、根据生成的序列生成索引矩阵。
一种可行的实施方式中,生成索引矩阵的方式请参照上述步骤202,此处不作赘述。
步骤603、基于总加密次数T、第一初值x0、第二初值μ以及公式(1),生成加密步长矩阵。
一种可行的实施方式中,生成加密步长矩阵的方式请参照上述步骤203,此处不作赘述。
步骤604、基于第一初值x0、第二初值μ以及公式(1),生成像素扩散矩阵。
一种可行的实施方式中,生成加密步长矩阵的方式请参照上述步骤2051,此处不作赘述。
步骤605、通过像素扩散矩阵以及加密图像的像素值矩阵,得到像素扩散前的加密图像的像素值矩阵。
一种可行的实施方式中,此步骤为上述步骤2052的逆推,即根据公式(8)中的C′以及Q′,得到C,此处不作赘述。
步骤606、通过加密步长矩阵对像素扩散前的加密图像的像素值矩阵进行解密,得到加密前的原始图像。
一种可行的实施方式中,此步骤为上述步骤2041-2044的逆推,以像素扩散前的加密图像的像素值矩阵中的一个元素举例说明,先在加密步长矩阵中确定该元素对应的加密步长,然后在索引矩阵中查到该元素对应的行数与列数,将行数与列数组合成三位数,即为上一次的加密元素,此时加密步长减1;再将组合成的三位数在索引矩阵中查找对应的行数与列数,将行数与列数组合成三位数,即为上上次的加密元素,此时加密步长再减1……以此类推,直至加密步长等于0,停止重复上述步骤,此时得到的三位数即为原始图像的像素值。具体地:
如图7所示,在索引表中查找到与像素值C(i,j)等值的M′(u1,v1),记下C(i,j)对应的行号u1和列号v1,即当C(i,j)=M′(u1,v1)时,令:C1(i,j)=u1×10+v1,t=t-1,如果t>0,则继续在索引表中查找C1(i,j),并记下C1(i,j)在索引矩阵M′中对应行号u2和列号v2,即当C1(i,j)=M′(u2,v2)时,令:C2(i,j)=u2×10+v2,t=t-1,以此类推,直到t=0结束,当所有像素完成上述操作后,便可以还原出原始图像A,计算公式可以概括为下述公式(9):
本发明的实施例中:
(1)利用低维混沌序列构建一个大小为10×26的索引矩阵,索引矩阵的行号和列号恰好能组成图像的256个灰度级,利用索引矩阵行号、列号的组合与分解,直接在索引矩阵中进行查值替换,便能实现图像的加密与解密;
(2)构造的索引矩阵,运算量小,生成速度快,随机性强,且加密过程不需要复杂数学运算,主要依赖行号与号列组合与分解查表即可完成,可以极大提高加解密速度,有明显的效率优势。
(3)该方法通过性强,适合于任意大小、任意比例、任意格式由256个灰度级构成的图像.
(4)混沌系统与索引矩阵的结合发挥了混沌的强安全性和大密钥空间特性,也兼顾了运行效率,通过简单的操作和低的处理负载,便得到一种高安全性、高效的图像加密算法。
图8是根据一示例性实施例示出的一种基于索引矩阵的图像加密装置框图。参照图8,该装置包括加密模块810和解密模块820。
所述加密模块810用于:
获取待加密图像的像素值矩阵,获取由预设密码转化的第一初值x0、第二初值μ以及总加密次数T,根据所述第一初值x0、第二初值μ记忆下述公式Logistic映射(1),生成一个长度为256且各元素互不相等的随机序列:
xk+1=μxk(1-xk) (1)
其中,3.569945≤μ≤4,xk∈[0,1];
根据生成的序列生成索引矩阵;
基于所述总加密次数T、第一初值x0、第二初值μ以及公式(1),生成加密步长矩阵,通过所述加密步长矩阵以及所述索引矩阵对待加密图像的像素值矩阵进行加密,得到加密后的像素值矩阵;
基于所述第一初值x0、第二初值μ以及公式(1),生成像素扩散矩阵,根据所述像素扩散矩阵对所述加密后的像素值矩阵进行像素扩散,得到加密图像;
所述解密模块820用于:
获取加密图像,获取由预设密码转化的第一初值x0、第二初值μ以及总加密次数T,根据所述第一初值x0、第二初值μ以及上述公式(1),生成一个长度为256且各元素互不相等的序列;
根据生成的序列生成索引矩阵;
基于所述总加密次数T、第一初值x0、第二初值μ以及公式(1),生成加密步长矩阵;
基于所述第一初值x0、第二初值μ以及公式(1),生成像素扩散矩阵;
通过所述像素扩散矩阵以及所述加密图像像素值矩阵,得到所述像素扩散前的加密图像像素值矩阵;
通过所述加密步长矩阵对所述像素扩散前的加密图像像素值矩阵进行解密,得到加密前的原始图像。
可选地,所述加密模块810,用于:
通过对去重后的随机序列排序,并按序记录各元素在排序前的位置编号值,得到一个长度为256、各元素互不相同、且恰好能填充满0~255区间的、由所述位置编号值组成的正整数序列,将得到的正整数序列转换为尺寸为10×26大小索引矩阵的前256位,后4位由不属于0~255的任意指定值进行填充。
可选地,所述加密模块,用于:
选取t,其中,t为1:T内的随机数(1≤t≤T),
采用上述公式(1)生成一个长为m×n的序列T′,对T′作如下述公式(2)(3)的变换:
T″=mod(fix(T′(i)×1000),T′)+1,1≤i≤m×n则:1≤T′≤t; (2)
S=reshape(T″,m,n)1≤S(i,j)≤t,1≤i≤m,1≤j≤n; (3)
其中,S即为所述像素值矩阵对应的加密步长矩阵,m、n为所述待加密图像的像素尺寸;fix()表示向0取整,mod()取模运算,reshape()是重新调整矩阵中元素的行数、列数、维数的运算。
可选地,所述加密模块810,用于:
将所述像素值矩阵中的每个元素转化为三位数;
对于所述像素值矩阵中任一元素,将所述元素进行数值分解为第一数值以及第二数值,其中,所述第一数值为所述三位数的元素的前两位数值,所述第二数值为所述三位数的元素的最后一位数值,将所述第一数值与所述第二数值确定为所述元素的行序号以及列序号,根据所述元素的行序号与列序号,在所述索引矩阵中查找所述元素对应的加密元素,此为完成元素的一次加密,在所述加密步长矩阵中确定所述像素值矩阵的元素对应的加密步长元素,根据所述加密步长元素对所述像素值矩阵中的元素进行加密;
当根据所述加密步长矩阵对所述像素值矩阵中的每个元素均完成加密后,得到的矩阵即为加密后的像素值矩阵。
可选地,所述加密模块810,用于:
设A(i,j)为所述索引矩阵中的一个元素,将A(i,j)的第一数值设为row,第二数值记为col,按照下述公式(4)(5)分别得到row以及col:
式中:rem(x,y)为取余运算,rem(x,y)=x-y×fix(x/y),fix()表示向0取整。
可选地,所述加密模块810,用于:
采用第一初值x0、第二初值μ以及上述公式(1)生成一个长为m×n的随机序列Q,按照下述公式(6)(7)将所述Q转化为m×n大小的像素扩散矩阵Q′:
Q=mod(fix(T(i)×1000),256) (6)
Q′=reshape(Q,m,n) (7)
按照下述公式(8)根据所述像素扩散矩阵对所述加密后的像素值矩阵进行像素扩散,得到加密图像:
其中,1≤i≤m×n;0≤Q≤255;1≤Q′(i,j)≤t;1≤i≤m;1≤j≤n;C为得到的加密后的像素值矩阵对应的图像;为C′像素扩散后得到的加密图像。
本发明的实施例中:
(1)利用低维混沌序列构建一个大小为10×26的索引矩阵,索引矩阵的行号和列号恰好能组成图像的256个灰度级,利用索引矩阵行号、列号的组合与分解,直接在索引矩阵中进行查值替换,便能实现图像的加密与解密;
(2)构造的索引矩阵,运算量小,生成速度快,随机性强,且加密过程不需要复杂数学运算,主要依赖行号与号列组合与分解查表即可完成,可以极大提高加解密速度,有明显的效率优势。
(3)该方法通过性强,适合于任意大小、任意比例、任意格式由256个灰度级构成的图像.
(4)混沌系统与索引矩阵的结合发挥了混沌的强安全性和大密钥空间特性,也兼顾了运行效率,通过简单的操作和低的处理负载,便得到一种高安全性、高效的图像加密算法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器,上述指令可由装置的处理器执行以完成上述基于索引矩阵的图像加密方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
在示例性实施例中,还提供了一种应用程序产品,包括一条或多条指令,该一条或多条指令可以由装置的处理器执行,以完成上述基于索引矩阵的图像加密方法。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。