Logistic函数是源于一个人口统计的动力学系统,其系统方程形式如下:
X(k+1) = u \* X(k) \* [1 - X(k)],(k=0,1,…,n)
混沌的解释
顾名思义就是一种无序的、不可预测的、混乱的、摸不到头、摸不到尾的状态。
混沌最大的特性就是对初始值敏感。通俗的说,就是蝴蝶效应,在某某某地方,一个蝴蝶轻轻煽动一下翅膀就会产生很大的飓风。
为什么这个方程可以称作混沌呢?它什么时候是一个混沌系统呢?这个也是有条件的:
0 < X(0) < 1
3.5699456... < u <=4
混沌序列的生成
当迭代n次后,我们就得到了X(1)、X(2)、…,X(n)这么n个值。那么这就是一个混沌序列,是一维的暂且称作序列A,也就是我们想要得到的序列,在MATLAB中,可以看出X(i)(i=1,2,…,n)的取值是在(0,1)之间的——这是一个很好地特性,就像图像灰度值是在(0,255)之间一样。那么我们把这个一维序列归一化到(0,255)之间得到序列B。
加密过程
对于一幅
M*N
大小的图像(暂且称为Picture),我们需要产生一个同样大小的矩阵来对其进行加密。如此说来,只需要迭代M*N次得到序列A,再转成序列B,此时序列B是一维的,将其转化成MXN
的二维矩阵(暂且称为Fuck)。因此,用Fuck与Picutre进行异或,便可得到一幅新的图像,称作Rod,如此便完成了一次图像加密,加密后的图像为Rod。Rod=Picture⊕Fuck(⊕表示异或)
加密算法分析
这样我们手中的密钥是:u,X(0);
此种加密方式称作序列加密,可以看出这种加密方式改变了下像素的灰度(直方图变了),没有改变位置。
解密同样道理:
Picture = Rod⊕Fuck