索引
传送门
- 文献原文可前往其收录处《混沌映射与比特重组的图像加密》.
- 文献的算法流程 (包括算法勘误, 算法整理) 可以参见博文《《混沌映射与比特重组的图像加密》(平萍等)一文的算法流程》.
- 对算法背后一些理论的分析可以参见博文《《混沌映射与比特重组的图像加密》(平萍等)一文的算法分析》.
- 对原文算法的改进可以参见博文《《混沌映射与比特重组的图像加密》(平萍等)一文的算法改进和展望》.
- 对算法的性能分析可以参见博文《《混沌映射与比特重组的图像加密》(平萍等)一文的性能分析(一)-- 敏感性分析 (基于Matlab)》 以及 《《混沌映射与比特重组的图像加密》(平萍等)一文的性能分析(二)-- 相关性, 安全性强度, 计算用时分析 (基于Matlab)》.
- 原文算法的实现可以参见博文《《混沌映射与比特重组的图像加密》(平萍等)一文的算法实现(基于Matlab)》.
前言
(1) 仿真m文件中使用到的函数m文件:
- tent_mapping_once.m
- henon_mapping_once.m
- henon_mappinginv_once.m
- cmbr_encryption.m
- 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), 1−x(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 秒。
解密过程得到的中间密文图像与加密过程的一致, 无损
解密过程得到的解密图像与原明文图像一致, 无损
结论是原文解密算法照常适用, 代码照常运行.