学号 2017-2018-2 《程序设计与数据结构》实验五报告
课程:《程序设计与数据结构》
班级: 1723
姓名: 康皓越
学号:20172326
实验教师:王志强
实验日期:2018年6月13日
必修/选修: 必修
1.实验内容
- 1.实验1:
-
结对实现中缀表达式转后缀表达式的功能 MyBC.java
-
结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java
- 2.实验2:
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器
- 服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
- 3.实验3:
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后通过网络把密文发送给服务器
- 服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
- 4.实验4:
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文发送给服务器
- 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
- 服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
- 5.实验5:
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文和明文的MD5值发送给服务器
- 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
- 服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
2. 实验过程及结果
实验一
实验二
- 代码链接
- 代码解释:使用TCP协议,以及Java Socket方法实现数据传输。利用实验1的基础,实例化一个MyBc方法的对象,调用相关的方法,实现中后缀转换及计算,将结果传给服务器即可。
- 结果截图:
实验三
- 代码链接
- 代码解释:使用AES算法,进行加解密,得出相应的密钥,将密钥发给结对伙伴后,将加密后的后缀进行加密,服务器解密后计算结果并传回给客户端。
- 结果截图:
实验四
-
关键代码截图:
-
代码解释:实验四要求使用DH算法进行加密,DH算法的原理困扰了我很久,在反复学习娄老师的代码后获得了理解。DH算法应用于非对称加密。通过公钥与私钥之间的相关性使得,在获得了对方的公钥后,利用计算出的混合密钥得到新的密钥来解密密文。关键在于将DH算法与AES密钥相结合起来。
-
结果截图:
实验五
- 代码链接
- 关键代码截图:
- 代码解释:主要是利用方法,在加密的方法里加入计算MD5摘要的代码即可。分别计算明文与密文。
- 结果截图:
3. 实验过程中遇到的问题和解决过程
问题一:
- 解决方法:将if换为while。为什么呢?根据我的理解,该方法每次只读一行,有时可能会造成其不完整,应用while循环就可以将数据读取完整。
问题二:端口被占用
-
问题
-
解决方法:在任务管理器中可以查找出占用相应端口的程序,将其强行停止即可,除此之位,客户端与服务器可以协商一个新的port,直接使用即可。
问题三
-
密钥长度出现不符,在张旭升学长的精彩指点之下,在参数列表处多家两个参数就完美解决了相应的问题。查询相关的JDK文档
我们的问题是两种加密算法密钥长度不一致,那么,在其构造方法中给中了相应的参数,我们将其截断,取我们所需要的符合方法要求的长度就可以了。
- 解决方法
其他(感悟、思考等)
- 通过这次实验,以及上次的密码学实验加深了我对相关内容的理解,很有帮助,和同学们一起结对编程也充满了收获。