Logistic 混沌置乱,先不说有多复杂,其实很简单。
Logistic 函数是源于一个人口统计的动力学系统,其系统方程形式如下:
X(k+1) = u * X(k) * [1 - X(k)],(k=0,1,…,n)
先不用管这个方程是怎么得出来的,觉得不舒服的话自己百度去。可以看出这个
方程是非线性的,迭代的形式。要使用的话,我们需要知道两个东西:
① 初值:X(0)
② 参数:u
为什么这个方程可以称作混沌呢?它什么时候是一个混沌系统呢?这个也是有
条件的:
① 0 < X(0) < 1
② 3.5699456... < u <=4
当满足上述两个条件时,Logistic 函数工作于混沌状态。这两个条件是怎么来的
请百度,我们这里只说算法和实现。什么是混沌状态:顾名思义就是一种无序的、
不可预测的、混乱的、摸不到头、摸不到尾的状态。混沌状态时会出现什么现象,
我们以下面的参数为例:
① X(0) = 0.1
② 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 是一维的,将其转化成 M*N 的二维矩阵(暂
且称为 Fuck)。因此,用 Fuck 与 Picutre 进行异或,便可得到一幅新的图像,称
作 Rod,如此便完成了一次图像加密,加密后的图像为 Rod。
Rod=Picture⊕Fuck(⊕表示异或)
这样我们手中的秘钥是:u,X(0)
此种加密方式称作序列加密,可以看出这种加密方式改变了下像素的灰度(直方
图变了),没有改变位置。解密同样道理:Picture = Rod⊕Fuck。
代码如下:
% % % % % % % % % % % % % % 对图像加密
clc;
clear all;
close all;
评论1