2018-2019-2 20175215 实验五《网络编程与安全》实验报告

一、实验内容与步骤

1.任务一:两人一组结对编程。

  • 任务要求

      1. 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA
      1. 结对实现中缀表达式转后缀表达式的功能 MyBC.java
      1. 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java
      1. 上传测试代码运行结果截图和码云链接
  • 任务过程

  • 程序代码为:

  • 任务截图:

2.任务二:结对编程。

  • 1人负责客户端,一人负责服务器。

      1. 注意责任归宿,要会通过测试证明自己没有问题
      1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
      1. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器
      1. 服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
      1. 客户端显示服务器发送过来的结果
      1. 上传测试结果截图和码云链接
  • 任务过程

  • 程序代码为:

    • Client.java
    • Server.java
    • MyDC.java
    • MyBC.java
    • 代码详情见码云链接
  • 运行截图

    • 客户端截图

    • 服务器截图

3.任务三:加密结对编程。

  • 任务要求:1人负责客户端,一人负责服务器

      1. 注意责任归宿,要会通过测试证明自己没有问题
      1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
      1. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后通过网络把密文发送给服务器
      1. 服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
      1. 客户端显示服务器发送过来的结果
      1. 上传测试结果截图和码云链接
  • 任务过程:

  • 程序代码为:

    • Server2.java
    • Client2.java
    • Encoder.java
    • Skey_AES.java
    • MyDC.java
    • MyBC.java
    • 代码详情见码云链接
  • 运行截图

    • 客户端截图

    • 服务器截图

注:任务四任务五建立在公钥已由Key_DH.java生成好并传输给对方的前提下开始的。

4.任务四:密钥分发结对编程。

  • 任务要求:1人负责客户端,一人负责服务器

      1. 注意责任归宿,要会通过测试证明自己没有问题
      1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
      1. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文发送给服务器
      1. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
      1. 服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
      1. 客户端显示服务器发送过来的结果
      1. 上传测试结果截图和码云链接
  • 任务过程:

  • 程序代码为:

    • Client3.java
    • Server3.java
    • Encoder.java
    • Key_DH.java
    • KeyAgree.java
    • MyDC.java
    • MyBC.java
  • 运行截图:

    • 客户端截图

    • 服务器截图

5.任务五:完整性校验结对编程。

  • 任务要求:1人负责客户端,一人负责服务器

      1. 注意责任归宿,要会通过测试证明自己没有问题
      1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
      1. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文和明文的MD5値发送给服务器
      1. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
      1. 服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
      1. 客户端显示服务器发送过来的结果
      1. 上传测试结果截图和码云链接
  • 任务过程:

  • 程序代码为:

    • Client4.java
    • Server4.java
    • Encoder.java
    • DigestPass.java(将老师所给的代码DigestPass.java进行相应的修改,使其能够比较生成的消息摘要是否相同。)
    • Key_DH.java
    • KeyAgree.java
  • 运行截图:

    • 客户端截图

    • 服务器截图

SP.码云链接

SP2.实验中碰到的问题

1.结对伙伴使用jdk包版本不对的问题

  • 问题:导入以下两个包出现错误
  • 问题解决:使用jdk包版本不对
    结对伙伴使用的是jdk11,而这两个包是jdk8中的,因此出现上图错误。

2.传输的被加密的密钥与解密后原密钥不对的问题

  • 问题:传输密钥画蛇添足的使用以下代码之后传输,而不是直接使用key1(String)
        String keyone= new String (a1);
        keyone = Encoder.AESEncode(sharekey,keyone);//客户端对密钥进行DH加密

导致下图的问题

  • 问题解决:使用原来的密钥加密后直接传输(主要问题在于新建的密钥字符串相比于原来的密钥少了一个空格)

SP3.参考资料

1.Java 密码学算法
2.20165235 实验五 网络编程与安全
3.Java重写equals方法(重点讲解)

posted @ 2019-05-20 15:16  20175215丁文韬  阅读(195)  评论(0编辑  收藏  举报