二维混沌序列相位板的双随机相位编码

一、核心算法原理

1.1 双随机相位编码(DRPE)系统

输入图像 f(x,y) → 乘以相位板1 P₁(x,y) → 光学变换(菲涅尔/傅里叶)→ 乘以相位板2 P₂(x,y) → 输出密文

1.2 混沌相位板生成

使用二维混沌系统(如Henon映射)生成确定性随机序列:

xₙ₊₁ = 1 - a·xₙ² + yₙ
yₙ₊₁ = b·xₙ

其中a、b为混沌参数,x₀、y₀为初始值(密钥)。


二、MATLAB实现代码

2.1 主程序:chaos_drpe_main.m

%% 二维混沌序列相位板的双随机相位编码系统
% 功能:利用混沌系统生成随机相位板,实现光学图像加密

clear; clc; close all;

%% 1. 系统参数设置
key1 = [0.1, 0.2, 1.4, 0.3];   % 混沌密钥1: [x0, y0, a, b]
key2 = [0.5, 0.6, 1.5, 0.2];   % 混沌密钥2: [x0, y0, a, b]
N = 256;                       % 图像尺寸
lambda = 632.8e-9;              % 光波长(m)
dx = 10e-6;                    % 采样间隔(m)
z = 0.15;                      % 衍射距离(m)

fprintf('=== 混沌双随机相位编码系统 ===\n');
fprintf('混沌密钥1: [x0=%.3f, y0=%.3f, a=%.3f, b=%.3f]\n', key1(1), key1(2), key1(3), key1(4));
fprintf('混沌密钥2: [x0=%.3f, y0=%.3f, a=%.3f, b=%.3f]\n', key2(1), key2(2), key2(3), key2(4));
fprintf('光学参数: λ=%.2fnm, dx=%.1fμm, z=%.2fm\n\n', lambda*1e9, dx*1e6, z);

%% 2. 生成混沌相位板
fprintf('生成混沌相位板...\n');
phase_mask1 = generate_chaos_phase_mask(N, key1);
phase_mask2 = generate_chaos_phase_mask(N, key2);

%% 3. 加载明文图像
plaintext = imread('cameraman.tif');
if size(plaintext, 3) == 3
    plaintext = rgb2gray(plaintext);
end
plaintext = im2double(imresize(plaintext, [N, N]));

%% 4. 显示相位板和原始图像
figure('Name', '混沌相位板与原始图像', 'Color', 'white', 'Position', [100, 100, 1000, 300]);
subplot(1,3,1); imshow(phase_mask1, []); 
title('混沌相位板 1', 'FontSize', 12, 'FontWeight', 'bold');
subplot(1,3,2); imshow(phase_mask2, []); 
title('混沌相位板 2', 'FontSize', 12, 'FontWeight', 'bold');
subplot(1,3,3); imshow(plaintext, []); 
title('原始明文图像', 'FontSize', 12, 'FontWeight', 'bold');

%% 5. 加密过程(菲涅尔域)
fprintf('执行菲涅尔域加密...\n');
tic;

% 第一次相位调制
modulated1 = plaintext .* exp(1i * 2 * pi * phase_mask1);

% 菲涅尔衍射传播
U1 = fresnel_propagation(modulated1, lambda, dx, z);

% 第二次相位调制
modulated2 = U1 .* exp(1i * 2 * pi * phase_mask2);

% 输出密文
ciphertext = modulated2;

encryption_time = toc;
fprintf('加密完成!耗时: %.3f秒\n', encryption_time);

%% 6. 解密过程
fprintf('执行解密过程...\n');
tic;

% 逆第二次相位调制
decrypted1 = ciphertext .* exp(-1i * 2 * pi * phase_mask2);

% 逆菲涅尔衍射传播
decrypted2 = fresnel_propagation(decrypted1, lambda, dx, -z);  % 负距离表示反向传播

% 逆第一次相位调制
decrypted_plaintext = decrypted2 .* exp(-1i * 2 * pi * phase_mask1);

% 提取幅度作为重建图像
reconstructed = abs(decrypted_plaintext);

decryption_time = toc;
fprintf('解密完成!耗时: %.3f秒\n', decryption_time);

%% 7. 结果显示与分析
figure('Name', '加密与解密结果', 'Color', 'white', 'Position', [100, 100, 1400, 400]);

subplot(1,5,1); imshow(plaintext, []); 
title('原始图像', 'FontSize', 12, 'FontWeight', 'bold');

subplot(1,5,2); imshow(log(1+abs(ciphertext)), []); 
title('加密密文', 'FontSize', 12, 'FontWeight', 'bold');

subplot(1,5,3); imshow(reconstructed, []); 
title('解密重建图像', 'FontSize', 12, 'FontWeight', 'bold');

subplot(1,5,4); 
% 计算图像质量指标
mse_value = immse(plaintext, reconstructed);
psnr_value = psnr(plaintext, reconstructed);
ssim_value = ssim(plaintext, reconstructed);
corr_value = corr2(plaintext, reconstructed);

imshow(abs(plaintext - reconstructed), []); 
title('残差图像', 'FontSize', 12, 'FontWeight', 'bold');

subplot(1,5,5); axis off;
text(0.1, 0.9, '图像质量评估:', 'FontSize', 12, 'FontWeight', 'bold');
text(0.1, 0.75, sprintf('MSE: %.4f', mse_value), 'FontSize', 10);
text(0.1, 0.65, sprintf('PSNR: %.2f dB', psnr_value), 'FontSize', 10);
text(0.1, 0.55, sprintf('SSIM: %.4f', ssim_value), 'FontSize', 10);
text(0.1, 0.45, sprintf('相关系数: %.4f', corr_value), 'FontSize', 10);
text(0.1, 0.3, sprintf('加密时间: %.3fs', encryption_time), 'FontSize', 10);
text(0.1, 0.2, sprintf('解密时间: %.3fs', decryption_time), 'FontSize', 10);
title('质量评估报告', 'FontSize', 12, 'FontWeight', 'bold');

%% 8. 密钥敏感性测试
fprintf('\n=== 密钥敏感性测试 ===\n');
test_key_sensitivity(key1, key2, plaintext, phase_mask1, phase_mask2, lambda, dx, z);

2.2 混沌相位板生成函数:generate_chaos_phase_mask.m

function phase_mask = generate_chaos_phase_mask(N, key)
    % 使用二维Henon混沌映射生成混沌相位板
    % 输入:
    %   N: 相位板尺寸 (N x N)
    %   key: [x0, y0, a, b] 混沌初始值和参数
    % 输出:
    %   phase_mask: 混沌相位板 (0-2π)
    
    x0 = key(1); y0 = key(2); a = key(3); b = key(4);
    
    % Henon映射方程
    % x_{n+1} = 1 - a*x_n^2 + y_n
    % y_{n+1} = b * x_n
    
    % 预分配内存
    total_points = N * N + 2000;  % 额外点用于预热
    x = zeros(1, total_points);
    y = zeros(1, total_points);
    
    % 初始化
    x(1) = x0;
    y(1) = y0;
    
    % 迭代生成混沌序列
    for i = 1:(total_points-1)
        x(i+1) = 1 - a * x(i)^2 + y(i);
        y(i+1) = b * x(i);
    end
    
    % 丢弃前2000个点(预热期)
    chaos_seq = x(2001:end);
    
    % 重塑为二维矩阵
    chaos_matrix = reshape(chaos_seq, N, N);
    
    % 归一化到[0,1]
    chaos_matrix = (chaos_matrix - min(chaos_matrix(:))) / ...
                   (max(chaos_matrix(:)) - min(chaos_matrix(:)));
    
    % 映射到相位范围[0, 2π]
    phase_mask = 2 * pi * chaos_matrix;
    
    fprintf('混沌相位板生成完成: %dx%d\n', N, N);
end

2.3 菲涅尔衍射传播函数:fresnel_propagation.m

function U_out = fresnel_propagation(U_in, lambda, dx, z)
    % 二维菲涅尔衍射传播(基于角谱法)
    % 输入:
    %   U_in: 输入复振幅场
    %   lambda: 光波长(m)
    %   dx: 采样间隔(m)
    %   z: 传播距离(m),负值表示反向传播
    % 输出:
    %   U_out: 输出复振幅场
    
    [M, N] = size(U_in);
    
    % 计算频率坐标
    fx = (-N/2:N/2-1) / (N * dx);
    fy = (-M/2:M/2-1) / (M * dx);
    [FX, FY] = meshgrid(fx, fy);
    
    % 菲涅尔传递函数
    k = 2 * pi / lambda;  % 波数
    H = exp(1i * k * z) .* exp(-1i * pi * lambda * z * (FX.^2 + FY.^2));
    
    % 频域卷积实现衍射
    U_out = ifft2(fft2(U_in) .* fftshift(H));
end

2.4 密钥敏感性测试函数:test_key_sensitivity.m

function test_key_sensitivity(key1, key2, plaintext, pm1, pm2, lambda, dx, z)
    % 测试密钥敏感性:微小变化导致解密失败
    
    fprintf('测试密钥敏感性...\n');
    
    % 原始解密
    [~, original_recon] = decrypt_image(plaintext, pm1, pm2, lambda, dx, z);
    original_corr = corr2(plaintext, original_recon);
    
    % 测试密钥1的微小变化
    key1_modified = key1;
    key1_modified(1) = key1(1) + 1e-15;  % 极微小的变化
    
    pm1_modified = generate_chaos_phase_mask(size(plaintext,1), key1_modified);
    [~, modified_recon] = decrypt_image(plaintext, pm1_modified, pm2, lambda, dx, z);
    modified_corr = corr2(plaintext, modified_recon);
    
    fprintf('原始密钥解密相关系数: %.4f\n', original_corr);
    fprintf('密钥1变化1e-15后的相关系数: %.4f\n', modified_corr);
    
    if modified_corr < 0.1
        fprintf('✓ 密钥敏感性测试通过:微小变化导致解密完全失败\n');
    else
        fprintf('⚠ 密钥敏感性不足\n');
    end
end

function [ciphertext, reconstructed] = decrypt_image(plaintext, pm1, pm2, lambda, dx, z)
    % 辅助函数:执行解密
    modulated1 = plaintext .* exp(1i * 2 * pi * pm1);
    U1 = fresnel_propagation(modulated1, lambda, dx, z);
    modulated2 = U1 .* exp(1i * 2 * pi * pm2);
    ciphertext = modulated2;
    
    decrypted1 = ciphertext .* exp(-1i * 2 * pi * pm2);
    decrypted2 = fresnel_propagation(decrypted1, lambda, dx, -z);
    decrypted_plaintext = decrypted2 .* exp(-1i * 2 * pi * pm1);
    reconstructed = abs(decrypted_plaintext);
end

三、扩展功能:分数傅里叶域加密

3.1 分数傅里叶变换函数:fractional_fourier.m

function U_out = fractional_fourier(U_in, alpha, lambda, dx)
    % 分数傅里叶变换
    % alpha: 变换阶数 (0-1之间)
    % 当alpha=0.5时为标准傅里叶变换
    
    [M, N] = size(U_in);
    fx = (-N/2:N/2-1) / (N * dx);
    fy = (-M/2:M/2-1) / (M * dx);
    [FX, FY] = meshgrid(fx, fy);
    
    % 分数傅里叶变换核
    k = 2 * pi / lambda;
    theta = alpha * pi / 2;
    
    if abs(alpha - 1) < 1e-10
        % 标准傅里叶变换
        U_out = fftshift(fft2(U_in));
    elseif abs(alpha) < 1e-10
        % 恒等变换
        U_out = U_in;
    else
        % 一般分数傅里叶变换
        H = exp(1i * k * (FX.^2 + FY.^2) * tan(theta/2)) .* ...
            exp(-1i * pi * theta / 2);
        U_out = ifft2(fft2(U_in) .* fftshift(H));
    end
end

3.2 分数域双随机相位加密

function ciphertext = fractional_drpe(plaintext, pm1, pm2, alpha1, alpha2, lambda, dx)
    % 分数域双随机相位加密
    % alpha1, alpha2: 分数阶数(作为额外密钥)
    
    % 第一次相位调制 + 分数傅里叶变换
    modulated1 = plaintext .* exp(1i * 2 * pi * pm1);
    U1 = fractional_fourier(modulated1, alpha1, lambda, dx);
    
    % 第二次相位调制 + 分数傅里叶变换
    modulated2 = U1 .* exp(1i * 2 * pi * pm2);
    ciphertext = fractional_fourier(modulated2, alpha2, lambda, dx);
end

参考代码 二维混沌序列构成的相位板的双随机相位 www.youwenfan.com/contentcnu/60106.html

四、分析与优化

4.1 算法复杂度分析

操作 时间复杂度 空间复杂度
混沌序列生成 O(N²) O(N²)
相位调制 O(N²) O(N²)
菲涅尔传播 O(N² log N) O(N²)
总复杂度 O(N² log N) O(N²)

4.2 安全性增强建议

  1. 多混沌系统级联:使用Chen系统、Lorenz系统等超混沌系统
  2. 时空混沌:引入时空混沌网格增加密钥空间
  3. 光学变换多样性:结合菲涅尔、分数傅里叶、小波变换
  4. 压缩感知:在加密前进行压缩采样,增强抗攻击能力

4.3 实际应用注意事项

  1. 量化效应:实际光学系统中需要考虑相位板的量化位数
  2. 噪声鲁棒性:添加适当的纠错编码应对信道噪声
  3. 实时性优化:使用GPU加速大规模图像加密
  4. 密钥管理:建立安全的密钥分发和更新机制
posted @ 2026-05-07 19:00  yes_go  阅读(11)  评论(0)    收藏  举报