system: [SYSTEM]

user: 3. 基于一维混沌映射和类标准映射的图像加密算法 基于以上的结果和分析，在这一节设计一种基于一维混沌映射和类标准映射的数字彩色图像加密新算法。这个算法采用不同于传统模式的预先扩散–置乱–扩散结构。在明文图像的预处理阶段，利用LLS，SSS产生两个初始向量对明文图像进行预处理，这样可以大大地提高算法抵抗已知明文和选择明文的能力。在置乱–扩散阶段，先利用本文提出的类标准映射产生伪随机数对预处理后的明文图像的像素位置进行依行依列的置乱，然后使用不同初值和参数的类标准映射构造出2个不相同密钥矩阵，并利用它们按照动态反馈的方式来对置乱后的像素灰度值进行扩散产生密文。在这个算法中，采用依行依列的方式对明文图像进行加密，这样可以增大加解密速度。不失一般性，不妨记明文图像为 P ，且其大小为 H × W × T ， H ， W 为彩色图像颜色通道的像素灰度值矩阵大小， T 为彩色图像颜色通道的数量，即 T = 3 ，本文提出的加密算法详细步骤如下： 图4. (a)-(b)分别是类标准映射的x，y时间序列变化图 图5. (a)-(c)分别为类标准映射时间序列的自相关性和互相关性测试结果 Step1 读取明文，输入密钥。读入明文彩色图像 P ，并记 HWT = H × W × T ；输入混沌映射的参数 u 、 u 1 、 u 2 ，为了避免过渡效应发生的预先迭代步数 N 0 ，一维混沌映射的初值 x 10 ， x 20 。另外，把3维明文彩色图像 P 按从上到下、从左到右的顺序拉成大小为 NH × NW 的2维图像矩阵 P 1 ，理论上为了加密算法具有更快的速度，应该尽量使 P 1 是方形图像矩阵，即要满足 NH × NW = HWT 和 abs ( NW − NH ) 最小。在本算法的仿真实验中，取 NH = H ， NW = T × W 。 Step2 产生两个初始向量 ipdv_r ， ipdv_c 。首先依据输入参数 u 和初值 x 10 ， x 20 对LLS，SSS分别迭代 ( N 0 + NW ) ， ( N 0 + NH ) 次产生两个一维向量 x 1 、 x 2 ，为了避免量化过程过渡效应的发生，把 x 1 ， x 2 的前 N 0 项丢弃，并且把丢弃 N 0 项后的 x 2 拉成一个列向量，这样就得到两个新的向量 x 1 ， x 2 ，大小分别为 1 × NW ， NH × 1 。最后利用如下数学公式(8)，(9)产生一个初始行向量 ipdv_r 和一个列向量 ipdv_c 。 ipdv_r = mod ( round ( ( abs ( x 1 ) − floor ( x 1 ) ) × 10 14 ) ， 256 ) (8) ipdv_c = mod ( round ( ( abs ( x 2 ) − floor ( x 2 ) ) × 10 14 ) ， 256 ) (9) Step3 对 P 1 按行进行预处理。设置 i 的取值为1到 NH ，令初始行向量 ipdv_r 的每个元素向右周期移动 i 位产生与 ipdv_r 相同大小的 r 1 ，然后依据如下式(10)对 P 1 进行预处理产生 P2 。 P 2 ( i ， : ) = { m o d ( ( P 1 ( i ， : ) + r 1 ) ， 256 )                                                                 if   i = 1 b i t x o r ( m o d ( ( P 1 ( i ， : ) + r 1 ) ， 256 ) ， P 2 ( ( i − 1 ) ， : ) )       else (10) Step4 对 P2 按列进行预处理。同样地，让 j 的取值为1到 NW ，令初始列向量 ipdv_c 的每个序列值向下周期移动 j 位产生与 ipdv_c 相同大小的 c 1 ，然后根据如下式(11)对 P2 做预处理运算，最终产生预处理图像 P 3 。 P 3 ( : ， j ) = { mod ( ( P 2 ( : ， j ) + c 1 ) ， 256 )                                                               i f   j = 1 b i t x o r ( mod ( ( P 2 ( : ， j ) + c 1 ) ， 256 ) ， P 3 ( : ， ( j − 1 ) ) )       e l s e (11) Step5 计算类标准映射新的初值和新的整数值 N 00 。首先计算 P 3 的像素灰度值总和，并且记为 sum_P 3 ，然后利用如下式子(12)，(13)，(14)，(15)分别计算出初值 x 30 ， y 30 ， N 00 。 x 30 = mod ( ( x 1 ( end ) + ( sum_P 3 / ( HWT × 256 ) ) ) × 10 14 ， 1 ) (12) y 30 = mod ( ( x 2 ( end ) + ( sum_P 3 / ( HWT × 255 ) ) ) × 10 14 ， 1 ) (13) nu = mod ( round ( ( u 1 + u 2 ) × 10 14 ) ， 256 ) + 1 (14) N 00 = N 0 + mod ( ( nu + sum_P 3 ) ， 256 ) (15) Step6 计算坐标索引向量 PR 1 ， PC 1 ， PR 2 ， PC2 。首先依据初值 x 30 ， y 30 和参数 u 1 ， u2 迭代类标准映射 ( N 00 + NW ) 次产生两个伪随机序列，并分别把前 N 00 个迭代值丢弃得到两个新的伪随机序列 x 3 ， y 3 。采用 x 3 和 y 3 的前 N H 个对应元素的算术平均值来产生新的向量 x4 ，其大小为 1 × NH ，类似地，采用 x 3 ， y 3 的对应元素的几何平均值产生另外一个新的一维向量 y4 ，其大小为 1 × NW 。最后通过如下(16)，(17)，(18)，(19)得到坐标索引向量 PR 1 ， PC 1 ， PR 2 ， PC2 。 PR 1 = mod ( round ( ( abs ( x 1 ) − floor ( x 1 ) ) × 10 14 ) ， NH ) + 1 (16) PC 1 = mod ( round ( ( abs ( y 3 ) − floor ( y 3 ) ) × 10 14 ) ， NW ) + 1 (17) PR 2 = mod ( round ( ( abs ( x 4 ) − floor ( x 4 ) ) × 10 14 ) ， NH ) + 1 (18) PC 2 = mod ( round ( ( abs ( y 4 ) − floor ( y 4 ) ) × 10 14 ) ， NW ) + 1 (19) Step7 对预处理后的图像进行置乱。设置 i 的取值为1到 N H ，让 的第 PR 1 ( i ) 行和第 PR 2 ( i ) 行互相交换，然后令 j 的取值为1到 N W ，让 P 3 的第 PC 1 ( j ) 列和 P 第 PC 2 ( j ) 列互相交换得到置乱图像矩阵 P 3 。 Step8 构造密钥矩阵 S 1 ， S2 。利用与Step6相同的参数值和序列 ， y 1 的最后一项作为类标准映射新的初值并对其迭代 ( HWT + N 0 ) 次，将前 N 0 个序列值丢弃得到两个大小均为 1 × HWT 的序列 x 5 ， y 5 ，通过如下(20)，(21)式进行量化并把两个一维向量分别按从上到下、从左到右拉成2维密钥矩阵 S 1 ， S 2 。 S 1 = mod ( ceil ( x 5 × 10 14 ) ， 256 ) (20) S 2 = mod ( ceil ( y 5 × 10 14 ) ， 256 ) (21) Step9 对 P 3 按行做扩散运算。首先把初始行向量 ipdv_r 添加到 P 3 的最后一行，此时的矩阵仍记为 P 3 。设置 i 的取值为1到 NH ，计算 P 3 的第 ( i + 1 ) 行到最后一行所有像素灰度值的和，记为 key_r ，然后采用式(22)，(23)对 P 3 进行按行扩散得到 P4 。 key_r = mod ( key_r ， 256 ) (22) P 4 ( i ， : ) = { b i t x o r ( b i t x o r ( mod ( ( P 3 ( i ， : ) + S 1 ( i ， : ) ) ， 256 ) ， S 2 ( ( k e y _ r + 1 ) ， : ) ) ， k e y _ r ) ，   i f   i = 1 b i t x o r ( b i t x o r ( mod ( ( P 3 ( i ， : ) + S 1 ( i ， : ) ) ， 256 ) ， P 4 ( ( i − 1 ) ， : ) ) ， k e y _ r )                     e l s e (23) Step10 对 P4 按列做扩散运算。把 P4 最后一行丢弃并把初始列向量 ipdv_c 放到 P4 的最后一列，记上述操作后的图像为 P5 。类似于Step9，让 j 的取值为1到 N W ，计算 P4 的第 ( j + 1 ) 列到最后一列所有像素灰度值和，记为 key_c ，然后通过式(24)，(25)对 P4 进行扩散操作得到密文 P6 。 key_c = mod ( key_c ， 256 ) (24) P 6 ( : ， j ) = { b i t x o r ( b i t x o r ( mod ( ( P 5 ( : ， j ) + S 2 ( : ， j ) ) ， 256 ) ， S 1 ( : ， ( k e y _ c + 1 ) ) ) ， k e y _ c ) ，   i f   j = 1 b i t x o r ( b i t x o r ( mod ( ( P 5 ( : ， j ) + S 2 ( : ， j ) ) ， 256 ) ， P 6 ( : ， ( j − 1 ) ) ) ， k e y _ c )                     e l s e (25) 注：上述加密过程中， mod ( x ， y ) 是指实数 x 除以实数 y 得到的余数， round ( x ) 是指对实数 的四舍五入取整函数， floor ( x ) 返回不超过实数 x 的最大的整数， bitxor ( x ， y ) 返回的是实数 x 与实数 y 的按位异或运算结果， abs ( x ) 是指对实数 x 的取绝对值运算， ceil ( x ) 返回大于实数 x 的最小整数， P ( i ， : ) 是指矩阵 P 的第 i 行元素， P ( : ， j ) 是指矩阵 P 的第 j 列元素， x ( end ) 是指序列 x 的最后一项。本文提出加密算法的流程图如图6所示，解密过程是加密过程的逆过程，即采用相同密钥做逆运算，详细步骤这里不再赘述。