20172316 2018-2019-1《程序设计与数据结构》实验一报告

课程:《程序设计与数据结构》
班级: 1723
姓名: 赵乾宸
学号:20172316
实验教师:王志强
必修/选修:必修


1.实验内容

实验五 网络编程与安全-5

完整性校验结对编程:1人负责客户端,一人负责服务器

  1. 注意责任归宿,要会通过测试证明自己没有问题

  2. 基于Java Socket实现客户端/服务器功能,传输方式用TCP

  3. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文和明文的MD5値发送给服务器

  4. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换

  5. 服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端

  6. 客户端显示服务器发送过来的结果

  7. 上传测试结果截图和码云链接


2. 实验过程及结果

第一步:实现中缀转后缀以及后缀式的运算程序。

这是此次实验要实现的基本功能,不论是客户端还是服务器端都需要用到的程序。比较简单,由之前四则运算程序使用的进行小小的修改即可得到。

第二步:基于Java Socket实现客户端/服务器功能,传输方式用TCP

这里开始接触到这次实验的主题,主要是其中的网络编程,要求基于Java Socket实现客户端功能,由客户端发送所计算式子到服务器,再由服务器计算后返回给客户端。这里难度也不大,根据当天所做的课堂实践所学习的简单的Socket知识以及示例代码可很快解决。

第三步:加/解密

客户端对要求传输的后缀式进行加密(利用AES或3DES算法,本人使用3DES),然后传输至服务器端;
服务器对所受到的密文进行解密,再计算,将结果返回客户端。
从命令行输入和输出的信息来看,我们现在的操作和前面一样:给出一个中缀式,得到一个答案,但是过程已经开始变得复杂了,加入了加/解密过程后,不影响应用程序本来的功能发挥,但是可以让信息的传递更加安全,到这里实验引入了另一个重点:安全

第四步:DH算法进行密钥交换

这一步是对实验三中所学DH算法知识进行运用。主要是公钥、私钥的创建。

第五步:MD5值的求得以及比较

一开始并不知道MD5只是为了干什么,看见“比较”这个词汇察觉到这个MD5值应该和信息安全有一定关系,从娄老师博客查看得:

使用Java计算指定字符串的消息摘要

完全没有说到功能是什么,实验五的题干中也只说明了需要对比。

问百度

MD5值是为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护

懂了,确保消息的完整性,如果中途的信息被篡改,MD5值不相符合,那么服务器端可以拒绝服务以保证信息的安全。


3. 实验过程中遇到的问题和解决过程

  • 问题1:多条信息的处理(客户端如何发送多条信息?服务器端如何处理多条信息?)
  • 解决:这个问题很傻,课上应该是讲过的,但我没认真听,如果不是第五步要既要密文又要MD5值,我可能也不会考虑这个问题。
    客户端输出流:outputStreamWriter.write("str1")是写入一个str1,如果要写入另一个信息str2要怎么办?直接outputStreamWriter.write(str2)就行了。
    服务器输入:String info1 = bufferedReader.readLine()这里运用的方法将所接受的信息的一行提取出来,储存在info1中,第一次调用这个方法时,提取的是接受信息的第一行;如果再次使用String info2 = bufferedReader.readLine(),则会提取下一行信息储存至info2中(所以客户端发送信息过来要注意换行)。
    所以实质上在这里客户端就是一次性发送了一条整合的信息给服务器,只不过服务器按照分行一条条提取已达到分条处理的目的。(之后可以研究一下怎么处理多次接受信息)

------

其他(感悟、思考等)
这是我首次接触到网络编程,心情十分激动,原来网络通信并不是我预想的那么复杂,对网络编程的兴趣有高了一点,确实,我们系马上要更名为网络空间安全系了,有了网络才会去讨论其安全性,在进行程序基础设计的学习的同时,对网络的研究也不应该落下。

参考资料

《Java程序设计与数据结构教程(第二版)》
《Java程序设计与数据结构教程(第二版)》学习指导
Java密码学算法

猜你喜欢

转载自www.cnblogs.com/zhaoqianchen/p/9751565.html