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

该博客记录了Java结对编程实验,包括中缀转后缀表达式、客户端/服务器功能实现、加密传输、密钥分发及完整性校验等任务。实验基于Java Socket,采用TCP传输方式,使用3DES或AES算法加密,DH算法交换密钥。还提及实验中遇到的jdk包版本和密钥传输问题及解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实验内容与步骤

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

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

2.任务二:结对编程。

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

    • 服务器截图
      1268846-20190521220518826-1307050884.png

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
    • 代码详情见码云链接
  • 运行截图
    • 客户端截图
      1268846-20190522233815853-109080173.png

    • 服务器截图
      1268846-20190522233743617-1662328987.png

注:任务四任务五建立在公钥已由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
  • 运行截图:
    • 客户端截图
      1268846-20190525154929404-1675793242.png

    • 服务器截图
      1268846-20190525154934281-857955319.png

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
  • 运行截图:
    • 客户端截图
      1268846-20190525154942800-726615564.png

    • 服务器截图
      1268846-20190525154949591-1232409172.png

SP.码云链接

SP2.实验中碰到的问题

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

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

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

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

导致下图的问题
1268846-20190525154215857-1639728734.png

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

SP3.参考资料

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

转载于:https://www.cnblogs.com/jxxydwt1999/p/10894295.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值