南邮信安综合实验-基于AES算法采用不同加密模式实现文件加解密

该博客详细介绍了基于AES算法的文件加解密实现,涉及ECB和CBC两种加密模式。通过Java实现,包括文件加密和解密功能,支持自动生成16位随机密钥,具备图形化用户界面。文章还讨论了程序设计、功能模块、数据结构以及遇到的问题和解决方案,并提供了测试结果分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于AES算法采用不同加密模式实现文件加解密

一、课题内容和要求

课题需求的文本描述。

对于安全的分组密码算法来说,采用适当的加密模式可隐藏明文的统计特性、数据的格式等,以提高整体的安全性。美国在FIPS中定义了5种加密模式:电子密码本(ECB)、密码分组链接(CBC)、计数器模式(CTS)、输出反馈(OFB)和密码反馈(CFB)。本题目致力于编写程序实现基于AES算法采用不同加密模式实现文件的加解密,使学生更深入地了解DES算法以及不同的加密模式的工作原理和应用,提升编程能力。

题目的具体要求如下:

  1. 查阅相关资料,深入理解AES算法的加解密流程和不同加密模式的运行方法;
  2. 自选两种模式,例如:使用分组链接模式、密码反馈模式,利用AES算法设计一个对文件进行加密和解密的程序,程序分为文件加密和文件解密两部分;
  3. 文件加密部分输入:待加密文件的路径和文件名,加密密钥,加密模式,输出是加密后的文件;文件解密部分的输入:待解密文件的路径和文件名,解密密钥,输出是解密后的文件。
  4. 要求解密后的文件与源文件一致;程序支持密钥修改等操作。
  5. 对两种模式的加解密效率进行比较。
  6. 程序具有图形化用户界面,输出美观;
  7. 可根据自己能力,在完成以上基本要求后,对程序功能进行适当扩充;
  8. 撰写报告,对所采用的算法、程序结构和主要函数过程以及关键变量进行详细的说明;对程序的调试过程所遇到的问题进行回顾和分析,对测试和运行结果进行分析;总结软件设计和实习的经验和体会,进一步改进的设想;

提供关键程序的清单、源程序及可执行文件和相关的软件说明。

二、需求分析和总体设计

2.1本课题的主要功能包括:

(1)使用电子密码本模式(ECB)和分组链接模式(CBC),利用AES算法对文件进行加密和解密的程序

(2)通过UI界面可以实现用户加密时可以使用检索本机文件的方式来确定需要加密的文件,同样可以检索加密后文件的路径。根据用户手动输入的文件名和加密密钥可以实现对文件的加解密。

 (3)支持程序自动生成16位随机密钥供用户使用

 (4)支持用户自己选择程序提供的两种加解密模式

 (5)程序具有图形化界面,输出美观

 (6)能在程序后台输出相关日志,便于调试

2.2 本课题的体系结构设计

体系结构风格:面向对象系统

此次课题中的程序使用java语言编写,jdk环境为8.0,采用调用-返回的结构,不同的功能封装在各个不同的类中,相互调用,由UI类作为程序入口。

图 1体系结构设计

上述体系结构:

  ConNum:存放AES加/解密需要使用到的常量,S盒/逆S盒等

  Utils:工具类,包括打印4x4矩阵/异或/密钥分组等static方法

  Encrypt:实现加密,包含encryptECB/encryptCBC

  EncryptFile:此类中实现对文件流的处理,调用Encrypt进行对文件的加密功能

  Decrypt:实现解密,包含decryptECB/decryptCBC

  DecryptFile:此类中实现对文件流的处理,调用Decrypt进行对文件的解密功能

  UI:UI界面,作为整个程序的入口

2.3本课题的主要功能界面设计

使用java语言中的awt和swing进行UI设计

图 2 UI界面

三、相关功能模块详细设计

3.1 模块内的数据结构设计

AES处理数据的方式是一长段数据,分为多个长度为16字节(128 bits)的组(也叫块,英文中多用block一词),然后依次处理每一个块。因此AES不是流密码,而是分组密码。

(当今的AES,是AES竞赛优胜者Rijndael的精简版,相比于原版的Rijndael,其block size即块大小被限定为了128 bits,而192 bits和256 bits块大小不再被支持)

AES通过密钥来加密、解密信息,并且加密和解密过程使用的密钥完全相同,加密过程和解密过程具有一定的对称性,因此AES属于密码学中的对称密钥算法。AES支持三种密钥大小(key size):128 bits、192 bits和256 bits。一般认为其加密强度随密钥长度的增大而增大。

图 3 加密过程中使用到的数据结构

3.2 模块程序流程图设计

图 5 AES加解密详细流程

四、部分核心代码

图 6 ConNum类 初始向量/列混合矩阵

图 7 ConNum类 S盒/逆S盒

图 8 Encrypt类 加密过程

图 9 EncryptFile类 调用encrypt方法处理文件流

图 10 Decrypt类 解密

图 11 DecryptFile类 解密文件

图 12 Utils类 打印矩阵

图 13 Utils类 将明文转换成矩阵

图 14 Utils类 生成随机16位密钥

图 15 Utils类 转换16进制字符串

图 16 Utils类 密钥拓展

图 17 Utils类 字节代换操作

图 18 Utils类 行移位操作

图 19 Utils类 列混淆操作

图 20 Utils类 S盒替换操作

图 21 Utils类 矩阵异或操作

五、软件测试及其结果分析

对功能单元、集成模块以及系统功能进行相关测试,并给出与输入数据相匹配的算法执行结果,并进行分析。

图 22 单元测试 encryptFile

图 23 单元测试 decryptFile

图 24 测试 加密

图 25 测试 加密结果展示

图 26 测试 解密

图 27 测试 解密结果展示

六、课题完成过程中遇到的问题及解决方法

问题1:

图 28 问题1

UI界面显示中文时会乱码,当修改编译器系统设置fileencoding为UTF-8时仍就会码

解决方法

图 29 解决问题1方法

问题2:使用fileInputStream节点流处理文件时遇到中文或其他特殊符号会乱码

解决方法:将节点流包装成fileInputStreamReader流

问题3:在使用二进制进行异或的时候结果会出现错误的情况

解决方法:原来是类似0011这样的情况会被程序中忽略00,转换成二进制字符串。

附gitee地址:https://gitee.com/andoyd/aes.git

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值