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

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

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

1.实验内容

  • 实验五 网络编程与安全-1:两人一组结对编程

      1. 参考
      1. 结对实现中缀表达式转后缀表达式的功能 MyBC.java
      1. 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java
      1. 上传测试代码运行结果截图和码云链接
  • 实验五 网络编程与安全-2:结对编程:一人负责客户端,一人负责服务器
      1. 注意责任归宿,要会通过测试证明自己没有问题
      1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
      1. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器
      1. 服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
      1. 客户端显示服务器发送过来的结果
      1. 上传测试结果截图和码云链接
  • 实验五 网络编程与安全-3:加密结对编程:1人负责客户端,一人负责服务器
      1. 注意责任归宿,要会通过测试证明自己没有问题
      1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
      1. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后通过网络把密文发送给服务器
      1. 服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
      1. 客户端显示服务器发送过来的结果
      1. 上传测试结果截图和码云链接
  • 实验五 网络编程与安全-4:密钥分发结对编程:1人负责客户端,一人负责服务器
      1. 注意责任归宿,要会通过测试证明自己没有问题
      1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
      1. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文发送给服务器
      1. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
      1. 服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
      1. 客户端显示服务器发送过来的结果
      1. 上传测试结果截图和码云链接
  • 实验五 网络编程与安全-5:完整性校验结对编程:1人负责客户端,一人负责服务器
      1. 注意责任归宿,要会通过测试证明自己没有问题
      1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
      1. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文和明文的MD5値发送给服务器
      1. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
      1. 服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
      1. 客户端显示服务器发送过来的结果
      1. 上传测试结果截图和码云链接

2. 实验过程及结果

  • (1)网络编程与安全-1:测试MyBC和MyDC的代码,但是老师说可以用之前各组编写的四则运算的代码,所以我用的是我们组的中缀转后缀和计算结果的两个方法进行测试的。
  • (2)网络编程与安全-2:在证明自己电脑与别的电脑连接不上的前提下,我使用虚拟机替代另一台电脑进行的传输,通过客户端输入的中缀表达式,转换成后缀表达式在传输到服务端进行计算。最最重要的一部分就是端口和IP一定要注意写对!!

  • (3)网络编程与安全-3:开始加密传输,在客户端将后缀表达式进行加密传输,到服务器端进行解密计算,然后在传回来。最困难的部分就是进行密钥的传输,在下面遇到的问题和解决办法中具体详述。

  • (4)网络编程与安全-4:运用DH算法进行加解密,先要理解双方的产生的两个密钥,再把公钥相互传输过去,通过两个密钥产生终极密钥进行加密和解密。

  • (5)网络编程与安全-5:客户端传输密文和MD5,然后在服务端产生MD5,将两个MD5进行对比,如果不对则说明传输过程中有缺失和篡改,对的话则说明传输过程中没问题。这样的话,再通过DH算法进行加密的话,增强了传输过程中的安全性。

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

  • 问题1:密钥的传输问题
  • 问题1的解决方案:前两个实验没有加密,做起来还是比较顺手的。实验三感觉是一个分水岭。传输的过程需要带着密钥,但是将密钥通过QQ和微信传过去会有损失。想将密钥和密文以字符串的形式传输的话,在服务器上始终断不开,准备将密钥放到密文的字节数组里,再从服务端接收数组,从数组中扣除密钥的部分。
  • 问题2:MD5的问题
  • 问题2的解决方案:这个MD5在实验三的练习过程中就每太懂,知识按照娄老师的博客中的要求进行练习,之前偷过的懒之后都得补回来...所以,找度娘查到MD5类似一种数字签名,利用传输信息形成MD5(一串消息摘要),通过网络传输过去,接收方通过解密接受过来的信息并生成对应的MD5,通过传过来的和接收方生成的进行对比,如果一直则没有被篡改,不一致就说明在传输过程中被修改了。
  • 问题3:Wrong Key Size
  • 问题3的解决方案:密钥长度受限制,java运行时环境读到的是受限的policy文件。但是,我在按照网上的解决办法进行解决,在替换${jdk_home}/jre/lib/security目录下的 local_policy.jar 和 US_export_policy.jar 文件之后,却并无卵用...侯大哥给我加了一个一句话SecretKeySpec k =new SecretKeySpec(sb,"DESede");就可以解决。
  • 问题4:DataOutputStream和DataInputStream
  • 问题2的解决方案:这部分是在实验四遇到的问题。查到的代码可以实现实验四,但是不是很懂代码的含义。
    • writeUTF(String str)以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。
    • DataOutputStream,数据输出流允许应用程序以适当方式将基本Java数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。
    • 数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本Java数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。

其他

实验五就是不断的在两台电脑之间传输信息,显示明文传输到后来的密文传输,一个密钥到两个密钥的加密,还有MD5的传输。在练习的过程中遇到了很多关于密码的问题,也学习很多关于IO流的问题。

参考资料

原文地址:https://www.cnblogs.com/sanjinge/p/9199168.html

时间: 2024-10-13 20:57:48

20172305 2017-2018-2 《程序设计与数据结构》实验报告的相关文章

java程序设计第二次实验报告

北京电子科技学院(BESTI) 实验报告 课程:数据结构    班级:1352    姓名:何伟钦     学号:20135223 成绩:            指导教师:娄嘉鹏      实验日期: 2015.5.6 实验密级:         预习程度:             实验时间:5:30-10:00 仪器组次:23   必修/选修:必修       实验序号:02 实验名称:Java面向对象程序设计 实验目的与要求:1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.

java项目——数据结构实验报告

java项目——数据结构总结报告 20135315  宋宸宁 实验要求 1.用java语言实现数据结构中的线性表.哈希表.树.图.队列.堆栈.排序查找算法的类. 2.设计集合框架,使用泛型实现各类. 3.API的编写,并导出. 4.使用TDD模式,对程序进行测试,利用TestSuite将各测试类整合到一起. 5.与小组成员实现代码的整合. 实验设计过程 首先自学集合框架章节的内容,初步设计相关的类. 根据数据结构课本的章节分类,实验各数据结构类. 在类的编写过程中,经过老师的指导,我准备使用泛型

20145216史婧瑶《Java程序设计》第一次实验报告

实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 2.完成实验.撰写实验报告,实验报告模板见QQ群,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如“查网络”.“问同学”.“看书”等一

数据结构实验报告(四)

实验报告4 图的有关操作 无向网的创建.求度.深度遍历.广度遍历 1 #include <iostream> 2 #include <stdlib.h> 3 #include <stdio.h> 4 #include <string> 5 #define MAX_VERTEX_NUM 20 6 7 using namespace std; 8 //1.建立无向网的邻接表 9 10 typedef int InfoType;//权值 11 typedef ch

数据结构实验报告-实验四 图的构造与遍历

实验四   图的构造与遍历   l  实验目的 1.图的的定义和遍历 (1)掌握图的邻接矩阵.邻接表的表示方法. (2)掌握建立图的邻接矩阵的算法. (3)掌握建立图的邻接表的算法. (4)加深对图的理解,逐步培养解决实际问题的能力. l  实验内容 1.图的定义和遍历 (一)基础题 1.编写图基本操作函数: (1)CreateALGraph(ALGraph &G) 建立无向图的邻接表表示: (2)LocateVex(ALGraph &G,char v)图查找信息: (3)DFSTrave

数据结构实验报告-实验一 顺序表、单链表基本操作的实现

实验一    顺序表.单链表基本操作的实现   l  实验目的 1.顺序表 (1)掌握线性表的基本运算. (2)掌握顺序存储的概念,学会对顺序存储数据结构进行操作. (3)加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能力. l  实验内容 1. 顺序表 1.编写线性表基本操作函数: (1)InitList(LIST *L,int ms)初始化线性表: (2)InsertList(LIST *L,int item,int rc)向线性表的指定位置插入元素: (3)DeleteList1

数据结构实验报告-实验五 查找

实验五   查找   l  实验目的 1. 查找的基本概念 掌握在数组上进行各种查找的方法和算法. 深刻理解各种方法的特点,并能灵活运用. 加深对查找的理解,逐步培养解决实际问题的能力. l  实验内容 1.查找的基本概念 (一)基础题 1.编写各种查找方法的基本操作函数: (1)search1(int *k,int n,int key)无序线性表的顺序查找: (2)search2(int *k,int n,int key)有序线性表的顺序查找: (3)bin_search(int *k,int

20145235 《Java程序设计》第一次实验报告

实验一Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验知识点 1.JVM.JRE.JDK的安装位置与区别: 2.命令行运行javac:java:javac -cp; java -cp: 3.PATH,CLASSPATH,SOURCEPATH的设定方法与应用: 4.包管理:package:import:javac -d : 5.Eclipse(Netbeans)管理Java项目,调试:断点.单步执行等

数据结构实验报告(六)

实验6 排序 1 #include <iostream> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #define INFINITY INT_MAX 5 #define MAXSIZE 100 6 7 using namespace std; 8 typedef struct list 9 {int key; 10 }ElemType; 11 typedef struct { 12 ElemType data[MAXSIZ

2017-2018-2 20165336 实验四《Android开发基础》实验报告

20165336 实验四 Android程序设计 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:康志强 学号:20165336 指导教师:娄嘉鹏 实验日期:2018年5月14日 实验时间:13:45 - 15:25 实验序号:实验四 实验名称:Android程序设计 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到