20172308 实验五《Java面向对象程序设计 》实验报告
20172308 2017-2018-2 实验五 《网络编程与安全》报告
课程:《程序设计与数据结构》
班级: 1723
姓名: 周亚杰
学号:20172308
实验教师:王志强
实验日期:2018年6月13日
必修/选修: 必修
1.实验内容
网络编程与安全-1:结对实现从获取的表达式中实现后缀表达式求值的功能
网络编程与安全-2:客户端让用户输入中缀表达式,然后转化为后缀表达式,把后缀表达式通过网络发送给服务器,服务器接收后缀表达式,计算后缀表达式的值,把结果发送给客户端,客户端显示服务器发送过来的结果
网络编程与安全-3:客户端让用户输入中缀表达式,然后转化为后缀表达式,把后缀表达式用3DES或AES算法加密,通过网络把密文发送给服务器,服务器接收后缀表达式,进行解密(和客户端协商密钥),然后计算后缀表达式的值,把结果发送给客户端,客户端显示服务器发送过来的结果
网络编程与安全-4:客户端让用户输入中缀表达式,然后转化为后缀表达式,把后缀表达式用3DES或AES算法加密,通过网络把密文发送给服务器,客户端和服务器用DH算法进行3DES或AES算法的密钥交换,服务器接收后缀表达式,进行解密,然后计算后缀表达式的值,把结果发送给客户端,客户端显示服务器发送过来的结果
网络编程与安全-5:客户端让用户输入中缀表达式,然后转化为后缀表达式,把后缀表达式用3DES或AES算法加密,通过网络把密文和明文的MD5値发送给服务器,客户端和服务器用DH算法进行3DES或AES算法的密钥交换,服务器接收后缀表达式,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则计算后缀表达式的值,把结果发送给客户端,客户端显示服务器发送过来的结果
2. 实验过程及结果
注意责任归宿,要会通过测试证明自己没有问题
结对编程:1人负责客户端,一人负责服务器
基于Java Socket实现客户端/服务器功能,传输方式用TCP
网络编程与安全-1:
1.利用以前编写的四则运算代码结对实现中缀表达式转后缀表达式的功能
2.利用以前编写的四则运算代码结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能
3.实验结果截图:

网络编程与安全-2:
1.客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器
2.服务器接收到后缀表达式,计算后缀表达式的值,把结果发送给客户端
3.客户端显示服务器发送过来的结果
4.实验结果截图:


- 网络编程与安全-3:
1.客户端让用户输入中缀表达式,然后转化为后缀表达式,把后缀表达式用DES算法加密后通过网络把密文发送给服务器
2.服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,通过QQ传递密钥文件),然后计算后缀表达式的值,把结果发送给客户端
3.客户端显示服务器发送过来的结果
4.实验结果截图:


- 网络编程与安全-4:
1.客户端让用户输入中缀表达式,然后转化为后缀表达式,把后缀表达式用AES算法加密,通过网络把密文发送给服务器
2.客户端和服务器用DH算法进行AES算法的密钥交换(密钥文件通过QQ传递)
3.服务器接收到后缀表达式表达式后,进行解密,然后计算后缀表达式的值,把结果发送给客户端
4.客户端显示服务器发送过来的结果
5.实验结果截图:




- 网络编程与安全-5:
1.客户端让用户输入中缀表达式,然后转化为后缀表达式,把后缀表达式用AES算法加密通过网络把密文和明文的MD5値发送给服务器
2.客户端和服务器用DH算法进行AES算法的密钥交换
3.服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则计算后缀表达式的值,把结果发送给客户端
4.客户端显示服务器发送过来的结果
5.实验结果截图:






3. 实验过程中遇到的问题和解决过程
问题1:实验2中,一个小问题,输入中缀表达式,按回车后,在客户端转后缀的时候出现了问题:
问题1解决过程:经过几次实验,发现了导致这个奇怪现象的原因。现在来回顾一下我当时的操作:我们的中缀转后缀表达式,需要在操作数与操作符之间留有空格,以便调用Stringtokenizer方法经行分割、计算。然而事实上我也是那么做的,但是细节就是:我按照顺序一个操作数,空格,一个操作符地输入,但是突然我就少输入了一个空格,于是我就用键盘上地移动键将光标移动到操作符与操作数之间,然后敲上空格,然后回车。于是。。。就错了,是的,我应该再把光标移动到最后一个输入的字符后面回车地。。。
问题2:实验3中,传输的后缀表达式到服务器端显示的是一串乱码。。。
问题2解决过程:原本代码写的是outputstreamwriter,但是它只能传输字符串类型数据,所以把输出改成字节流的outputstream,即可输出字节类型
问题3:实验4中,首先感到疑惑的是,要产生密钥,需要自己的私钥和对方的公钥进行合成,这就涉及到一个问题:如何将自己(客户端)的公钥传给服务器。按照娄老师的博客已经给出的代码,我们可以做到把生成的密钥存放进文件当中并读取,但是做不到把文件传给服务器。然后又出现的一个问题是,如图:

额,这是借来的图。。。但是问题是一样的,提示密钥长度,还有wrong key size。问题3解决过程:虽然我们可以从文件中读取出密钥来,但是首先还是得有对方的公钥啊,那如何获得呢?代码也不会写。。。所以我们选择充分利用现代科学技术。。。利用腾讯QQ进行文件传输。对于后面的那个密钥长度问题,百度了一下DES算法,它的密钥长度是168位的,但是只有112位有效。而AES算法256位。所以做出如图的修改:

代码中AES的密钥长度设置也要改成256,再运行一下就OK了。问题4:实验5中,遇到的问题本应该在实验四中就出现,但是我们用了QQ传递文件从而避免了这个问题,那就是:如何从客户端发送多条消息给服务器,并让其成功接受
问题4解决过程:
这个问题很难解决。主要是不知道如何去传,如何去收。百度了一下这个问题:主要是涉及到了多线程的问题。客户端发送一条数据给服务器,服务器直接收就行了,但是如果要再发一条呢?客户端再写一条一样的发送语句?那服务器端如何识别呢?怎么识别、接受呢?关于这个问题网上虽然也有一些介绍,但是资源有限,尝试了一些可能的看得懂的代码。按道理来说应该是行得通的,但是IDEA总是提示错误,这个错误也看不懂,不理解。而且服务器也收不到两条数据,甚至第一条也没了。
于是,我们换了条思路,把两条数据(密文和明文的MD5值)都写进一条传输的语句当中,然后在服务器端,把前面的密文都出来保存起来,把后面的MD5值读出来保存起来。这样算是解决了这个实验当中的关键部分。问题5:实验五当中还出现了一个十分神奇的现象,如图:

本应该出现密文的地方,出现了如上图所示的一长串相同的数字。这个是真的绝望。。。问题5产生的分析(解决不了。。。):我们当时的做法就是像问题4中说的那样,把两条数据都写在一个输出语句中。但这样就有两种做法:一是把字节型的密文转换成字符串类型;二是把字符串类型的MD5值写进存放密文的字节数组。我们选择了前者,于是我们写了一个循环,把字节数组里的数据都作为字符串类型,一个一个输出出来了,但是最后导致的问题就是如问题5所叙述的那样,客户端输出的结果是正确无误的,但是传到服务器端之后,显示出来的就是如上图所示的那个鬼样子。。。后来实在出于无奈,解决不了这个问题(只好放弃了),就换了第二种做法。最终做出了结果。
参考资料
- 《Java和Android开发学习指南(第二版)》
- 《Java程序设计与数据结构教程(第二版)》学习指导
- abcd5711664321的博客
- 不知名的博客
- java Socket(二)
- 刘亚壮的专栏
- 小辉辉的博客
- Java 密码学算法
20172308 实验五《Java面向对象程序设计 》实验报告的更多相关文章
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- 实验二Java面向对象程序设计实验报告(2)
实验二 Java面向对象程序设计 实验概述: 课程:程序设计与数据结构 班级:1623班 姓名: 邢天岳 学号:2309 指导老师:娄老师 王老师 实验日期:2017.4.16 实验名称: Java面 ...
- 实验二 Java面向对象程序设计实验报告
实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验 ...
- 20145326《Java程序设计》实验二Java面向对象程序设计实验报告
20145326<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- 20155217 实验二 Java面向对象程序设计 实验报告
20155217 实验二 Java面向对象程序设计 实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模 ...
- 20162305 实验二 Java面向对象程序设计 实验报告
20162305 实验二 Java面向对象程序设计 实验报告 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D ...
- 20145206《Java程序设计》实验二Java面向对象程序设计实验报告
20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告
20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...
- 20145219 《Java程序设计》实验二 Java面向对象程序设计实验报告
20145219 <Java程序设计>实验二 Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S. ...
- 20145239杜文超 《Java程序设计》实验二 Java面向对象程序设计实验报告
20145239 <Java程序设计>实验二 Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S. ...
随机推荐
- 解决The valid characters are defined in RFC 7230 and RFC 3986错误问题
分析原因: 导致上述问题是因为tomcat自tomcat 8.0.35版本之后对URL参数做了比较规范的限制,必须遵循RFC 7230 and RFC 3986规范,对于非保留字字符(json格式的请 ...
- [转]VS 2012环境下使用MFC进行OpenGL编程
我就不黏贴复制了,直接给出原文链接:VS 2012环境下使用MFC进行OpenGL编程 其它好文链接: 1.OpenGL系列教程之十二:OpenGL Windows图形界面应用程序
- 浅谈 MVC 和 MTV
浅谈 MVC 和 MTV 一.MVC M:model,模型,就是数据模型,负责数据的存取: V:view,视图,负责页面的展示逻辑: C:controller,控制器,负责业务逻辑的处理: 二.MTV ...
- ETH—Lwip以太网通信
第39章 ETH—Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- odoo tree视图 当页不弹窗显示方法
<xpath expr="//tree" position="attributes"> <attribute name='editable'& ...
- 20155226 《网络对抗》exp6信息搜集与漏洞扫描
20155226 <网络对抗>exp6信息搜集与漏洞扫描 实验后回答问题 哪些组织负责DNS,IP的管理? 目前域名机构主要包括ICANN理事会和CNNIC. Internet 域名与地址 ...
- 20155316 《网络对抗》Exp8 Web基础
实验内容 实验1:Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. 1.开启Apache服务 思路:使用service ...
- 20155323刘威良《网络对抗》Exp6 信息搜集与漏洞扫描
20155323刘威良<网络对抗>Exp6 信息搜集与漏洞扫描 实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 实践内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查 ...
- [agc011C]Squared Graph-[二分图]
Description 传送门 Solution 我们以下考虑的情况都是原图中非孤立的点. 题目要求新图的连通块个数.这个不好算,我们考虑计算新图的联通块内的特征点(x,y),即无法通过移动找到(t, ...
- mfc 进程的优先级
知识点: 进程优先级 获取当前进程句柄 优先级设置 优先级变动 优先级获取 一.进程优先级(优先级等级) 简单的说就是进程(线程)的优先级越高,那么就可以分占相对多的CPU时间片. ...