《混沌映射与比特重组的图像加密》(平萍等)一文的仿真实验 (基于Matlab)

传送门

  1. 文献原文可前往其收录处《混沌映射与比特重组的图像加密》.
  2. 文献的算法流程 (包括算法勘误, 算法整理) 可以参见博文《《混沌映射与比特重组的图像加密》(平萍等)一文的算法流程》.
  3. 对算法背后一些理论的分析可以参见博文《《混沌映射与比特重组的图像加密》(平萍等)一文的算法分析》.
  4. 对原文算法的改进可以参见博文《《混沌映射与比特重组的图像加密》(平萍等)一文的算法改进和展望》.
  5. 对算法的性能分析可以参见博文《《混沌映射与比特重组的图像加密》(平萍等)一文的性能分析(一)-- 敏感性分析 (基于Matlab)》 以及 《《混沌映射与比特重组的图像加密》(平萍等)一文的性能分析(二)-- 相关性, 安全性强度, 计算用时分析 (基于Matlab)》.
  6. 原文算法的实现可以参见博文《《混沌映射与比特重组的图像加密》(平萍等)一文的算法实现(基于Matlab)》.

前言

(1) 仿真m文件中使用到的函数m文件:

  1. tent_mapping_once.m
  2. henon_mapping_once.m
  3. henon_mappinginv_once.m
  4. cmbr_encryption.m
  5. cmbr_decryption.m

以上m文件的获取可前往博文《《混沌映射与比特重组的图像加密》(平萍等)一文的算法实现(基于Matlab)》, 或到博主的资源里下载( 资源名字为: 《混沌映射与比特重组的图像加密》工程文件.rar, 需1积分 ).
仿真m文件simulation_experiment.m

%%  m文件说明
%   对《混沌映射与比特重组的图像加密》一文的图像加密算法和解密算法的仿真实验
%   需要调用自定义函数文件cmbr_encryption.m, cmbr_decryption.m

%%  初始化与设置参数
clear;  clc;  close all;

% I0 = imread('fruit.png');  % 与原文相似的蔬果图, 大小为323 * 500
% I0 = I0(:, 1:323);  % 截取方形区域

I0 = imread('cat.png');  % 招财猫图, 大小为651 * 500

% I0 = zeros(256, 256);  % 结果: 仿真能够进行

% I0 = ones(256, 256) .* 255;  % 结果: 仿真能够进行

x0 = 0.234;  S = 1280;

%%  加密部分

%   展示原始明文图像I0和其直方图
figure,  imshow(I0);  title('明文图像');
figure,  imhist(I0);  title('明文图像直方图');

%   用密钥x0对明文图像I0进行加密, 得到中间密文图像C0, 密文图像C和解钥s, 并计时 
tic
[ C, C0, s ] = cmbr_encryption( I0, x0, S );
toc

%   展示中间密文图像C0, 最终密文图像C, 和各自的直方图
figure,  imshow(C0);  title('中间密文图像');
figure,  imhist(C0);  title('中间密文图像直方图');

figure,  imshow(C);  title('最终密文图像');
figure,  imhist(C);  title('最终密文图像直方图');

% close all
%%  解密部分

%   展示初始密文图像C和其直方图
figure,  imshow(C);  title('初始密文图像');
figure,  imhist(C);  title('初始密文图像直方图');

%   用解钥x0和s对密文图像C进行解密, 得到中间密文图像C1和明文图像I1, 并计时
tic
[I1, C1] = cmbr_decryption( C, x0, s, S );
toc

%   展示中间密文图像C1, 明文图像I1以及各自的直方图
figure,  imshow(C1);  title('中间密文图像');
figure,  imhist(C1);  title('中间密文图像直方图');

figure,  imshow(I1);  title('解密所得最终图像');
figure,  imhist(I1);  title('解密所得最终图像直方图');

if isequal(C0, C1)
    disp('解密过程得到的中间密文图像与加密过程的一致, 无损');
else
    disp('解密过程得到的中间密文图像与加密过程的不完全一致, 有损');
end

if isequal(I0, I1)
    disp('解密过程得到的解密图像与原明文图像一致, 无损');
else
    disp('解密过程得到的解密图像与原明文图像不完全一致, 有损');
end

% close all

(2) 以下仿真过程涉及到的 中间密文图像 C 0 C_0 C0 是指博文《《混沌映射与比特重组的图像加密》(平萍等)一文的算法流程》 整理后的加密算法步骤一节中的步骤(10)中 C 0 C_0 C0.

(3) 以下仿真过程中, 加密算法都是使用密钥 x 0 = 0.234 ,   S = 1280 { {x}_{0}}=0.234,\text{ }S=1280 x0=0.234, S=1280, 而解密算法都是使用解钥 x 0 = 0.234 ,   S = 1280 { {x}_{0}}=0.234,\text{ }S=1280 x0=0.234, S=1280.

加解密图像是大小为 N × N N \times N N×N的图像

由于找不到和原论文配图相同的高清图, 因此使用另一幅相似的图片素材进行仿真实验. 图片素材的大小为 323 × 323 323 \times 323 323×323.

加密结果


明文图像

中间密文图像

最终密文图像

明文图像直方图

中间密文图像直方图

最终密文图像直方图
历时 19.606227 秒。

直观上看第一行的图像变化, 表明该原算法确实具有较好的加密性质.
由第二行的直方图可知, 加密后明文图像的像素值的分布由不均匀变成了近似均匀分布, 明文图像的各个灰度级之间的相关性被打破, 使得原图没有了统计特性.

解密结果


初始密文图像

中间密文图像

最终解密图像

初始密文图像直方图

中间密文图像直方图

最终解密图像直方图
历时 19.114505 秒。
解密过程得到的中间密文图像与加密过程的一致, 无损
解密过程得到的解密图像与原明文图像一致, 无损

可以观察到解密后得到的图像与原明文图像完全一致, 即该算法对于 N × N N \times N N×N的解密是无损的.

加解密图像是大小为 M × N M \times N M×N的图像

博文《《混沌映射与比特重组的图像加密》(平萍等)一文的算法流程》中的 对原文加密算法的主要勘误 一节指出, 原论文中的算法是不支持 M ≠ N M \ne N M=N的情况的, 而对这种情况的处理的思想可以参见博文《《混沌映射与比特重组的图像加密》(平萍等)一文的算法改进和展望》中的 算法改进 一节. 下面直接给出加解密的结果. 使用的图片素材的大小分别为 323 × 500 323 \times 500 323×500蔬果图 651 × 500 651 \times 500 651×500招财猫图.

图像素材1的加密结果


明文图像

明文图像直方图

中间密文图像

中间密文图像直方图

最终密文图像

最终密文图像直方图
历时 30.393239 秒。

图像素材1的解密结果


初始密文图像

初始密文图像直方图

中间密文图像

中间密文图像直方图

最终解密图像

最终解密图像直方图
历时 30.213472 秒。
解密过程得到的中间密文图像与加密过程的一致, 无损
解密过程得到的解密图像与原明文图像一致, 无损

图像素材2的加密结果


明文图像

明文图像直方图
中间密文图像

中间密文图像直方图

最终密文图像

最终密文图像直方图
历时 64.467246 秒。

图像素材2的解密结果


初始密文图像

初始密文图像直方图
中间密文图像

中间密文图像直方图

最终解密图像

最终解密图像直方图
历时 58.161741 秒。
解密过程得到的中间密文图像与加密过程的一致, 无损
解密过程得到的解密图像与原明文图像一致, 无损

特例: 加密图像是全黑0矩阵图像或全白255矩阵图像

Tent混沌系统
x ( n + 1 ) = μ ⋅ min ⁡ { x ( n ) ,   1 − x ( n ) } ,   x ( n ) ∈ ( 0 , 1 ) . x\left( n+1 \right)=\mu \centerdot \min \left\{ x\left( n \right),\text{ }1-x\left( n \right) \right\},\text{ }x\left( n \right)\in \left( 0,1 \right). x(n+1)=μmin{ x(n), 1x(n)}, x(n)(0,1).
的控制参数 μ \mu μ要求满足 μ ∈ ( 1 , 2 ) \mu \in \left( 1,2 \right) μ(1,2), 而原文算法给出的 μ \mu μ的计算公式是
μ = 2 s / M × N × 255    , \mu ={ {2}^{ {s}/{M\times N\times 255}\;}}, μ=2s/M×N×255,
其中 s s s是明文图像的像素总和, M × N M\times N M×N是明文图像的大小. 当明文图像是全黑时, 有 s = 0 s=0 s=0, 此时由上式计算得 μ = 2 0 = 1 \mu ={ {2}^{0}}=1 μ=20=1; 当明文图像是全白时, 有 s = M × N × 255 s=M\times N\times 255 s=M×N×255, 此时由上式计算得 μ = 2 1 = 2 \mu ={ {2}^{1}}=2 μ=21=2; 而当明文图像是介于这两种情况之间的一般图像时, 有 μ ∈ ( 1 , 2 ) \mu \in \left( 1,2 \right) μ(1,2). 因此我们欲置明文图像为全黑, 全白这两种特殊情况, 检验原文算法能否照常适用, 博文《《混沌映射与比特重组的图像加密》(平萍等)一文的算法实现(基于Matlab)》提供的代码是否能照常运行.

全黑图像加密结果


明文图像

中间密文图像

最终密文图像

明文图像直方图
(只有最左边一条蓝竖线)

中间密文图像直方图
(只有最左边一条蓝竖线)

最终密文图像直方图
历时 9.351359 秒。

结论是原文加密算法照常适用, 代码照常运行.

全黑图像解密结果


初始密文图像

中间密文图像

最终解密图像

初始密文图像直方图

中间密文图像直方图
(只有最左边一条蓝竖线)

最终解密图像直方图
(只有最左边一条蓝竖线)
历时 8.138392 秒。
解密过程得到的中间密文图像与加密过程的一致, 无损
解密过程得到的解密图像与原明文图像一致, 无损

结论是原文解密算法照常适用, 代码照常运行.

全白图像加密结果


明文图像

中间密文图像

最终密文图像

明文图像直方图
(只有最右边一条蓝竖线)

中间密文图像直方图
(只有最右边一条蓝竖线)

最终密文图像直方图
历时 12.630789 秒。

结论是原文加密算法照常适用, 代码照常运行.

全白图像解密结果


初始密文图像

中间密文图像

最终解密图像

初始密文图像直方图

中间密文图像直方图
(只有最右边一条蓝竖线)

最终解密图像直方图
(只有最右边一条蓝竖线)
历时 11.978184 秒。
解密过程得到的中间密文图像与加密过程的一致, 无损
解密过程得到的解密图像与原明文图像一致, 无损

结论是原文解密算法照常适用, 代码照常运行.

猜你喜欢

转载自blog.csdn.net/qq_44261017/article/details/111405218