• 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文档

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

    • 解决方法

    其他(感悟、思考等)

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

    参考资料

  • 相关阅读:
    cct,web技术
    cct信息安全
    TFS2010安装与管理
    centos7 opera济览器安装
    Hadoop 的常用组件一览
    Exception in thread "main" java.net.BindException: Address already in use: JVM_Bind
    gcc manual
    5350.support
    meminfo,df,
    WCF
  • 原文地址:https://www.cnblogs.com/326477465-a/p/9201067.html
Copyright © 2020-2023  润新知