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

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

课程:《程序设计与数据结构》
班级: 1723
姓名: 王志伟
学号:20172309
实验教师:王志强老师
实验日期:2018年6月13日
必修/选修: 必修

1.实验内容

  • 预备实验:

    • 实验要求:

      1.伙伴1编写服务器端程序,接收客户端发送的数据(形式如下:12 15 8 100 25 34 19),将其排序后,发回给客户端。
      2.伙伴2编写客户端程序,将一串字符串(形式如下:12 15 8 100 25 34 19)发送给服务器端,接收排序后的程序,并显示。
      3.截图上传,附上码云地址。

    • 实验结果:
    • 程序代码:https://gitee.com/CS-IMIS-23/20172309_javaProgramming/blob/master/Test/test4/SocketServer.java
  • 实验一:
  • 实验二:
    • 实验要求:

      1. 注意责任归宿,要会通过测试证明自己没有问题
      2. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
      3. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器
      4. 服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
      5. 客户端显示服务器发送过来的结果
      6. 上传测试结果截图和码云链接
    • 实验结果:
    • 程序代码:https://gitee.com/CS-IMIS-23/20172309_javaProgramming/commit/05b5f89e5e3ac0849301491c205788ed5127cb5d
  • 实验三:
    • 实验要求:

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

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

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

      2. 问题及解决方案:

  • 问题一:运行了以后一直没反应,(保证自己写的代码没问题!)
  • 解决方案:这个实验是根据老师发过来的代码进行改造的,因此在这
    > //出现问题
    >     String info=null;
    >            String temp=null;
    >            while(!((temp = bufferedReader.readLine()) ==null)){//当使用while语句时,因为temp一直是空的,所以循环一直进行!(在前面应该对temp进行赋值,令temp = info)
    >                info = temp;
    >                System.out.println("我是服务器,学号【20172310】用户信息为:" + info);
    >            }
  • 问题二:在进行测试2时,当中缀表达式中含有“×”时,出现乱码!输出结果不能显示“×”。
  • 解决方案:出现这个问题的方法可能是使用的字符标准不同:
    客服端与服务器都得使用“UTF-8”标准。
  • 问题三:进行测试四的时候,需要使用DH算法进行秘钥传输。而生成秘钥的程序需要使用命令行进行实验。
    >public static void main(String args[ ]) throws Exception{//此处只能使用命令行输入命令
    >    DHParameterSpec DHP=
    >new DHParameterSpec(skip1024Modulus,skip1024Base);
    >
    >         KeyPairGenerator kpg= KeyPairGenerator.getInstance("DH");
    >         kpg.initialize(DHP);
    >         KeyPair kp=kpg.genKeyPair();
    >
    >         PublicKey pbk=kp.getPublic();
    >         PrivateKey prk=kp.getPrivate();
    >         // 保存公钥
    >         FileOutputStream  f1=new FileOutputStream(args[0]);
    >         ObjectOutputStream b1=new  ObjectOutputStream(f1);
    >         b1.writeObject(pbk);
    >         // 保存私钥
    >         FileOutputStream  f2=new FileOutputStream(args[1]);
    >         ObjectOutputStream b2=new  ObjectOutputStream(f2);
    >         b2.writeObject(prk);
    >       }

    而我想要的是在想使用这个程序,调用一个方法就行,因此,我们可以这样改:

    >     public static void fun(String s1,String s2) throws Exception{//将 args[] 改成一个方法+参数
    >            DHParameterSpec DHP= new DHParameterSpec(skip1024Modulus,skip1024Base);
    >            KeyPairGenerator kpg= KeyPairGenerator.getInstance("DH");
    >            kpg.initialize(DHP);
    >            KeyPair kp=kpg.genKeyPair();
    >            PublicKey pbk=kp.getPublic();
    >            PrivateKey prk=kp.getPrivate();
    >            //保存公钥
    >            FileOutputStream f1=new FileOutputStream(s1);
    >            ObjectOutputStream b1=new  ObjectOutputStream(f1);
    >            b1.writeObject(pbk);
    >            //保存私钥
    >            FileOutputStream  f2=new FileOutputStream(s2);
    >            ObjectOutputStream b2=new  ObjectOutputStream(f2);
    >            b2.writeObject(prk);
    >          }

    这样我们想要实现这个功能,只需要调用这个方法就行了。

    3. 收获感悟

    实验五是在实验三的基础上做的,用到了实验三详细说明的密码学内容。在学实验三的时候,根本看不懂!!!可能是自己没认真看全部是复制粘贴的。不过现在重新学了一下感觉好多了,好像能看出个所以然出来了。实验五的目的是让我们学会用加密形式进行传输,虽然在实验的过程中出现了很多错误,但最后都解决了,而且在做实验的过程中发现弄这个实验其实也挺有趣的。最后提交作业的时候发现自己是交的比较早的,因为我是站在巨人的肩膀上完成实验的(参考了网上的一些方法)!在此感谢他们~

4. 参考文献

1.java密码学算法
2.java IO流总结
3.IO流详解
4.DH算法原理

原文地址:https://www.cnblogs.com/dky-wzw/p/9192296.html

时间: 2024-08-24 16:44:17

# 学号 2017-2018-20172309 《程序设计与数据结构》实验五报告的相关文章

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

这是这学期最后一次实验了,也是学到了很多东西,希望自己可以可以善始善终,加油! 让我们开始这一篇博客吧! 20172329 2017-2018-2 <程序设计与数据结构>实验五报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 王文彬 学号:20172329 实验教师:王志强 实验日期:2018年6月11日 必修/选修: 必修 一.实验内容 1.网络编程与安全-1 两人一组结对编程: a. 参考http://www.cnblogs.com/rocedu/p/6766748

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

20172308 2017-2018-2 <程序设计与数据结构>实验五报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 马瑞蕃 学号:20172327 实验教师:王志强 实验日期:2018年6月13日~2018年6月18日 必修/选修: 必修 1.实验内容 + 任务1: 两人一组结对编程: 1.参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 2.结对实现中缀表达式转后缀表达式的功能 MyBC.java 3.结对

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

20172311 2017-2018-2 <程序设计与数据结构>实验五报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 赵晓海 学号:20172311 实验教师:王志强 实验日期:2018年6月18日 必修/选修: 必修 1.实验内容 网络编程与安全-1 两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式

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

20172321 2017-2018-2 <程序设计与数据结构>实验五报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 吴恒佚 学号:20172321 实验教师:王志强 实验日期:2018年6月13日~2018年6月18日 必修/选修: 必修 一.实验内容 1.网络编程与安全-1 两人一组结对编程: a. 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA b. 结对实现中缀表达式转后缀表达式的功能 MyBC.ja

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

20172332 2017-2018-2 <程序设计与数据结构>实验五报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 于欣月 学号:20172332 实验教师:王志强 实验日期:2018年6月13日 必修/选修: 必修 1.实验内容 ①结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java 上传测试代码运行结果截图和码云链接 ②结对编程:1人负责客户端,一人负责服务器 注意责任归宿,

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

20172325 2017-2018-2 <程序设计与数据结构>实验五报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 邓煜坤 学号:20172325 实验教师:王志强 实验日期:2018年6月19日 必修/选修: 必修 一.实验内容 任务1: 两人一组结对编程: 1.参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 2.结对实现中缀表达式转后缀表达式的功能 MyBC.java 3.结对实现从上面功能中获取的表达

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

20172301 2017-2018-2 <程序设计与数据结构>实验五报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 郭恺 学号: 20172301 实验教师:王志强老师 助教:张旭升/刘伟康 实验日期:2018年6月18日 必修/选修: 必修 1.实验内容 实验1: 结对实现中缀表达式转后缀表达式的功能 Convert.java(我们小组的中缀转后缀的类名) 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用Comparision.java 上传测试代

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

20172315 2017-2018-2 <程序设计与数据结构>实验五报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 胡智韬 学号:20172315 实验教师:王志强 实验日期:2018年6月18日 必修/选修: 必修 1.实验内容 实验五 网络编程与安全-1 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式中实现后缀表

20182311 2019-2020-1 《数据结构与面向对象程序设计》实验五报告

20182311 2019-2020-1 <数据结构与面向对象程序设计>实验五报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 冷冲 学号:20182311 实验教师:王志强 实验日期:2019年10月16日 必修/选修: 必修 1.实验内容 1.Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章: 参考http://www.cnblogs.c