2017-2018-2 《程序设计与数据结构》实验五报告

学号 2017-2018-2 《程序设计与数据结构》实验五报告

课程:《程序设计与数据结构》

班级: 1723
姓名: 康皓越
学号:20172326
实验教师:王志强
实验日期:2018年6月13日
必修/选修: 必修

1.实验内容

  • 1.实验1:
    1. 参考(http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA)

    2. 结对实现中缀表达式转后缀表达式的功能 MyBC.java

    3. 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java

  • 2.实验2:
    1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
    2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器
    3. 服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
    4. 客户端显示服务器发送过来的结果
  • 3.实验3:
    1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
    2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后通过网络把密文发送给服务器
    3. 服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
    4. 客户端显示服务器发送过来的结果
  • 4.实验4:
    1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
    2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文发送给服务器
    3. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
    4. 服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
    5. 客户端显示服务器发送过来的结果
  • 5.实验5:
    1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
    2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文和明文的MD5值发送给服务器
    3. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
    4. 服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
    5. 客户端显示服务器发送过来的结果

2. 实验过程及结果

实验一

  • 关键代码链接1
  • 关键代码链接2
  • 思路:在将表达式转为后缀时,通过使用栈,将表达式的各个数字逐个扫描,同时,根据优先级方法,将高优先级运算符号放至栈的上方,从而转化为后缀表达式。
  • 结果截图:

实验二

  • 代码链接
  • 代码解释:使用TCP协议,以及Java Socket方法实现数据传输。利用实验1的基础,实例化一个MyBc方法的对象,调用相关的方法,实现中后缀转换及计算,将结果传给服务器即可。
  • 结果截图:

实验三

  • 代码链接
  • 代码解释:使用AES算法,进行加解密,得出相应的密钥,将密钥发给结对伙伴后,将加密后的后缀进行加密,服务器解密后计算结果并传回给客户端。
  • 结果截图:

实验四

  • 代码链接

  • 关键代码截图:

  • 代码解释:实验四要求使用DH算法进行加密,DH算法的原理困扰了我很久,在反复学习娄老师的代码后获得了理解。DH算法应用于非对称加密。通过公钥与私钥之间的相关性使得,在获得了对方的公钥后,利用计算出的混合密钥得到新的密钥来解密密文。关键在于将DH算法与AES密钥相结合起来。

  • 结果截图:

实验五

  • 代码解释:主要是利用方法,在加密的方法里加入计算MD5摘要的代码即可。分别计算明文与密文。
  • 结果截图:

3. 实验过程中遇到的问题和解决过程

问题一:

  • 解决方法:将if换为while。为什么呢?根据我的理解,该方法每次只读一行,有时可能会造成其不完整,应用while循环就可以将数据读取完整。

问题二:端口被占用

  • 问题

  • 解决方法:在任务管理器中可以查找出占用相应端口的程序,将其强行停止即可,除此之位,客户端与服务器可以协商一个新的port,直接使用即可。

问题三

  • 密钥长度出现不符,在张旭升学长的精彩指点之下,在参数列表处多家两个参数就完美解决了相应的问题。查询相关的JDK文档

我们的问题是两种加密算法密钥长度不一致,那么,在其构造方法中给中了相应的参数,我们将其截断,取我们所需要的符合方法要求的长度就可以了。

  • 解决方法

其他(感悟、思考等)

  • 通过这次实验,以及上次的密码学实验加深了我对相关内容的理解,很有帮助,和同学们一起结对编程也充满了收获。

参考资料

posted @ 2018-06-19 20:56  Tummy  阅读(208)  评论(0编辑  收藏  举报