zoukankan      html  css  js  c++  java
  • 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文档

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

    • 解决方法

    其他(感悟、思考等)

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

    参考资料

  • 相关阅读:
    Html禁止粘贴 复制 剪切
    表单标签
    自构BeanHandler(用BeansUtils)
    spring配置中引入properties
    How Subcontracting Cockpit ME2ON creates SD delivery?
    cascadia code一款很好看的微软字体
    How condition value calculated in sap
    Code in SAP query
    SO Pricing not updated for partial billing items
    Javascript learning
  • 原文地址:https://www.cnblogs.com/326477465-a/p/9201067.html
Copyright © 2011-2022 走看看