图像加密之Logistic混沌序列加密

  • 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