加载中…
个人资料
余额为0
余额为0
  • 博客等级:
  • 博客积分:0
  • 博客访问:64,050
  • 关注人气:31
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

数字图像处理算法及原理(八):Logistic混沌序列加密

(2014-04-30 00:37:09)
标签:

图像加密

logistic

置乱

混沌

序列

分类: 数字图像处理

Logistic混沌序列加密

Logistic混沌置乱,先不说有多复杂,其实很简单。(文章已插入音乐)

Logistic函数是源于一个人口统计的动力学系统,其系统方程形式如下:

 X(k+1) = u * X(k) * [1 - X(k)],k=0,1,,n

先不用管这个方程是怎么得出来的,觉得不舒服的话自己百度去。可以看出这个方程是非线性的,迭代的形式。要使用的话,我们需要知道两个东西:

    初值:X(0)

    参数:u

为什么这个方程可以称作混沌呢?它什么时候是一个混沌系统呢?这个也是有条件的:

     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)。因此,用FuckPicutre进行异或,便可得到一幅新的图像,称作Rod,如此便完成了一次图像加密,加密后的图像为Rod

Rod=PictureFuck表示异或

这样我们手中的秘钥是:uX(0)

此种加密方式称作序列加密,可以看出这种加密方式改变了下像素的灰度(直方图变了),没有改变位置。解密同样道理:Picture = RodFuck

下面是MATLAB代码:

 

%利用Logistic混沌映射,对灰度图像进行序列加密

function v=lock_logistic_gray(picture,x0,u)

[M,N]=size(picture);

x=x0;

%迭代100次,达到充分混沌状态

for i=1:100

    x=u*x*(1-x);

end

%产生一维混沌加密序列

A=zeros(1,M*N);

A(1)=x;

for i=1:M*N-1

A(i+1)=u*A(i)*(1-A(i));

end

%归一化序列

B=uint8(255*A);

%转化为二维混沌加密序列

Fuck=reshape(B,M,N);

Rod=bitxor(picture,Fuck);%异或操作加密

v=Rod;

figure;

imshow([picture,v]);

%完

下面是效果图:

数字图像处理算法及原理(八):Logistic混沌序列加密

原图
数字图像处理算法及原理(八):Logistic混沌序列加密
加密后
数字图像处理算法及原理(八):Logistic混沌序列加密原图直方图
数字图像处理算法及原理(八):Logistic混沌序列加密加密后直方图
如有疑问请加【数字图像处理群】:
389011389

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有