20172308 实验五《Java面向对象程序设计 》实验报告

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

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

1.实验内容

  • 网络编程与安全-1:结对实现从获取的表达式中实现后缀表达式求值的功能java

  • 网络编程与安全-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所叙述的那样,客户端输出的结果是正确无误的,可是传到服务器端以后,显示出来的就是如上图所示的那个鬼样子。。。后来实在出于无奈,解决不了这个问题(只好放弃了),就换了第二种作法。最终作出告终果。

参考资料

相关文章
相关标签/搜索