网络安全-复合混沌体系

本文介绍了使用Java编程实现复合混沌体系对图片进行加解密的过程,包括复合混沌映射的原理、加密和解密步骤,以及如何利用线性反馈移位寄存器和本原多项式增强安全性。提供了MATLAB代码示例以展示加密和解密的实际应用。
摘要由CSDN通过智能技术生成

Java代码使用复合混沌体系实现图片的加解密操作。

代码下载链接【复制可使用】:RuoYi - 403

记得在使用的时候修改一下文件输入输出路径。

【实验目的】

  1. 熟悉混沌的定义。
  2. 掌握复合混沌映射的特性。
  3. 掌握复合混沌映射的加、解密原理。
  4. 编程实现复合混沌映射的加、解密过程。

【实验原理】

单一的混沌迭代系统,其动力学行为容易破译,而复合混沌迭代系统的动力学行为则与复合序列R和各个混沌迭代子系统的动力学行为有关。一般而言,复合迭代系统保持了所有迭代子系统的混沌特性,比单个子系统的动力学行为还要复杂得多。由于采用了满足特定要求的复合序列和转换算子,使得加密位具有均匀的、独立同分布的特性,其抗统计性能良好。从其在数字图像加密中的运用来看,无论其视觉效果还是性能指数均优于一些常见的数字图像加密技术。

在(0,1)上构造两个特殊的函数,并对其性质进行分析。在(0,1)定义函数

                             (1)

                          (2)

由此可以得到两个迭代函数

。其性质请参考平台给出的文档。

由此,我们可以得到如图1所示的复合混沌加密模型。

图1  复合混沌序列数字图像的加密

其中,0、1均匀的比特流ri由线性反馈移位寄存器给出,图2给出了使用本原多项式的线性反馈移位寄存器的工作原理模型。

根据平台文档给出的定理2,复合混沌的解密可以使用

 或者

来解密,图3给出了使用

解密的模型。

图2线性反馈移位寄存器

图3  复合混沌序列数字图像的解密(使用

解密)

常见的本原多项式如图4所示。使用本原多项式对应位置的比特作为抽头值,可以使得其连续输出的2n+1-2个值在[1,2n+1-1]之间随机且唯一地出现一次,这样,就能确保这连续输出的2n+1-2个值中,0和1出现的概率相等。只要待加密对象的字节长度远远大于2n+1-2,就可以忽略比特流ri中0、1的不均匀性。

例如:一副1024×768×3(共2359296字节)字节的彩色图像,在使用n为7的本原多项式时,2n+1-2的值仅仅为254,显然,254是远远小于2359296的。

图4 常见的本原多项式

这里去掉的2个值是全0和全1的两个值,它们的出现会是线性反馈移位寄存器失去作用。

表1给出的数据表明,复合混沌加、解密系统产生的密文c输出具有独立同分布与均匀性,图5的加密效果给出了很好的说明。

表1  不同数量级复合序列选择均匀性试验数据

运算数量级

J

q=0

q=1

c=0

c=1

1E3

10

504

496

474

526

1E4

10

4994

5006

4988

5012

1E5

10

50168

49832

49844

50156

1E6

10

500280

499720

498670

501330

1E7

10

4999689

5000311

4999794

5000206

1E8

10

49999878

50000122

49996352

50003648

编程实现符合混沌加解密过程

根据以下MATLAB代码编程实现图像加解密工作

示例代码如下所示:
%
% 复合混沌加、解密实战系统,主程序
%
% img = imread('dog.jpg');
img = imread('lena1.bmp');
img1 = FHHD(img,0.15624562,164,10);
img2 = FHHDJM(img1,0.15624562,164,10);
figure,subplot(1,3,1);
imshow(img);title('原始图像');
subplot(1,3,2);
imshow(img1);title('加密图像');
subplot(1,3,3);
imshow(img2);title('解密图像');

function [img1]=FHHD(img,x0,g0,j0)
%
% 复合混沌加密函数
%
    [m,n,s] = size(img);        %获取尺寸
    img1 = img;                 %初始化加密之后图像
    for i=1:s                   %依次对每个比特进行加密
        for j=1:n
            for k=1:m
                for l=1:8
                    % 1、使用反馈移位寄存器依次输出ri
                    %使用本源多项式 x^7+x^3+1 抽头8、4、1位
                    ri = bitget(g0,1);
                    bit1 = bitget(g0,4);
                    bit2 = bitget(g0,8);
                    % 将抽头的三位进行异或得到新的最高位值newbit
                    newbit = bitxor(ri,bit1);
                    newbit = bitxor(newbit,bit2);
                    % 原始反馈移位寄存器g0右移一位
                    g0 = bitshift(g0,-1);
                    % 将g0最高位设置为计算得到的newbit
                    g0 = bitset(g0,8,newbit);
                    % 2、明文对应位与ri异或得到qi值
                    qi = bitxor(bitget(img(k,j,i),l),ri);
                    % 3、根据qi值用对应的混沌函数以及初始变量获得新的迭代混沌值
                    fx = 1-sqrt(abs(2*x0-1));
                    if(qi == 0)
                        fx = 1-fx;
                    end
                    % 更新x0的值
                    x0 = fx;
                    % 4、混沌值进行Rj非线性变换得到密文
                    img1(k,j,i) = bitset(img1(k,j,i),l,mod(floor(fx*2^j0),2));
                end
            end
        end
    end
    imwrite(img1,'jmtx.bmp','BMP');

function [img1]=FHHDJM(img,x0,g0,j0)
%
% 复合混沌解密函数
%
    [m,n,s] = size(img);        %获取尺寸
    img1 = img;                 %初始化加密之后图像
    for i=1:s                   %依次对每个比特进行加密
        for j=1:n
            for k=1:m
                for l=1:8
                    % 1、使用f1与初始x0计算混沌值
                    fx = 1-sqrt(abs(2*x0-1));
                    % 更新x0的值
                    x0 = fx;
                    % 2、混沌值进行Rj非线性变换得到si
                    si = mod(floor(fx*2^j0),2);
                    % 3、用1减去密文与si进行异或得到qi 
                    % 高版本MATLAB可以直接使用下面的语句
                    %qi = 1-bitxor(bitget(img(k,j,i),l),si);
                    tmp=bitxor(bitget(img(k,j,i),l),si);
                    if tmp==1
                        qi=0;
                    else
                        qi=1;
                    end
                    % 4、使用反馈移位寄存器依次输出ri
                    % 使用本源多项式 x^7+x^3+1 抽头8、4、1位
                    ri = bitget(g0,1);
                    bit1 = bitget(g0,4);
                    bit2 = bitget(g0,8);
                    % 将抽头的三位进行异或得到新的最高位值newbit
                    newbit = bitxor(ri,bit1);
                    newbit = bitxor(newbit,bit2);
                    % 原始反馈移位寄存器g0右移一位
                    g0 = bitshift(g0,-1);
                    % 将g0最高位设置为计算得到的newbit
                    g0 = bitset(g0,8,newbit);
                    % 5、qi与ri的异或值得到明文
                    mi = bitxor(qi,ri);
                    img1(k,j,i) = bitset(img1(k,j,i),l,mi);
                end
            end
        end
    end
    imwrite(img1,'gmtx.bmp','BMP');

原始图片:

加密后图片:

解密后图片:

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值