项目:基于MATLAB的DES算法数字图像加密与解密系统
项目简介
本项目是一个基于MATLAB环境开发的数字图像安全加解密系统。它深入实现了标准数据加密标准(DES)算法,专门针对数字图像(灰度或彩色)进行像素级的加密处理。系统不仅完成了DES算法的底层逻辑构建,还集成了完整的图像处理流程和安全性评估模块,能够将清晰的原始图像转化为不可识别的噪声图像,并能通过正确的密钥无损还原。
功能特性
1. 图像读取与自适应预处理
- 多格式支持:系统通过交互式文件选择窗口,支持读取 JPG, PNG, BMP, TIF 等常见格式的图像。
- 容错机制:如果用户取消选择,系统会自动加载内置的测试图像(peppers.png)以确保流程继续。
- 尺寸优化:为了保证加解密运算的实时性,系统会对超过 256x256 分辨率的图像进行自动缩放处理。
- 多通道处理:能够自动识别图像的通道数,对于RGB彩色图像,系统会分别对 R、G、B 三个通道独立进行加密,最后合并结果。
2. 标准DES算法底层实现
本项目未使用MATLAB内置的高级加密工具箱,而是从底层完整编写了DES算法的各个环节:
- 数据分组与填充:将图像像素矩阵转换为64位的二进制数据块。为了适应图像数据特性,实现了必要的填充逻辑。
- 密钥扩展:基于输入的8字符密钥(64位),通过PC-1置换、循环左移和PC-2置换,生成16轮所需的48位子密钥。
- Feistel结构:完整实现了16轮迭代处理,包括E扩展置换、密钥异或、S盒代换、P盒置换以及左右半部分的交换逻辑。
- 置换逻辑:包含算法首尾的初始置换(IP)和逆初始置换(IP-1)。
3. 安全性分析与评估
系统内置了可视化分析工具,用于评估加密效果:
- 直方图分析:对比显示原始图像、密文图像和解密图像的像素灰度分布,验证密文是否具备均匀分布的噪声特性。
- 相关性分析:通过随机采样3000个相邻像素点,计算并绘制原始图像与密文图像在水平方向的像素相关性散点图及相关系数。
- 信息熵计算:量化计算图像的混乱程度,对比加密前后的信息熵值(加密后应趋近于8)。
4. 无损还原验证
系统在解密完成后,会自动计算原始图像与解密图像的像素差异矩阵,验证解密过程是否真正做到了零误差的无损还原。
系统要求
- MATLAB R2016a 或更高版本
- 无需额外的工具箱(Image Processing Toolbox 仅用于基本的读取和显示,核心算法均为原生实现)
使用方法
- 在MATLAB中打开项目文件夹。
- 运行
main 函数。 - 在弹出的对话框中选择需要加密的图像文件。
- 程序将自动执行以下流程:
* 读取并预处理图像。
* 生成子密钥。
* 执行加密并将结果显示在控制台(包含耗时)。
* 执行解密并将结果显示在控制台(包含耗时)。
* 弹出可视化窗口展示图像对比、直方图和相关性散点图。
* 在控制台输出信息熵分析结果和无损验证结果。
实现细节与算法逻辑
主流程逻辑
程序首先定义了一个硬编码的默认密钥
'ANTIGRAV'。在读取图像后,将其分解为通道数据。针对每个通道,程序将其展平为一维向量,并根据DES的64位分组要求进行处理。如果数据长度不是64的倍数,程序会进行补零填充。
DES 核心处理 (des_process)
这是统管加密和解密的核心函数。
- 模式控制:根据传入的
encrypt 或 decrypt 标志,决定子密钥的使用顺序(加密正序,解密逆序)。 - 二进制转换:利用自定义函数将 Unit8 格式的像素数据转换为二进制比特流。
- 分组处理:将比特流切割为 64xN 的矩阵,通过循环对每个数据块应用IP置换、16轮Feistel迭代和逆IP置换。
- S盒代换 (
s_box_substitution):实现了DES算法中最关键的非线性变换。将48位输入分为8组,每组6位,通过首尾位确定行、中间四位确定列的方式查找S盒,输出32位结果。
密钥扩展 (generate_subkeys)
- 将64位初始密钥经过PC-1置换压缩为56位。
- 将56位密钥分为C、D两部分,进行16轮循环左移(根据轮数不同,左移1位或2位)。
- 每轮移位后,将C、D合并并通过PC-2置换选出48位作为该轮的子密钥。
辅助工具函数
为了保证代码的独立性和可移植性,项目手动实现了部分基础功能:
str2bin_vector:将字符串密钥转换为二进制向量。de2bi_custom / bi2de_custom:自定义实现的十进制与二进制转换函数,避免了对 MATLAB Communications Toolbox 的依赖。entropy_calc:基于图像直方图概率分布计算香农熵。analyze_correlation:随机选取像素点对,计算相关系数并绘制分布图,用于直观展示加密破坏相邻像素相关性的能力。
性能分析指标
运行程序后,控制台和图表将展示以下指标:
- 加解密耗时:衡量算法在当前硬件下的处理速度。
- 直方图:密文直方图应呈现平坦分布,以此证明算法有效掩盖了明文的统计特征。
- 相关系数:原始图像通常接近 1.0,而理想的加密图像应接近 0,表明相邻像素统计独立。
- 信息熵:加密图像的熵值越接近 8,表示图像越随机,安全性越高。