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

1、网络编程与安全-1

一、检查点要求

两人一组结对编程:html

  1. 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA
  2. 结对实现中缀表达式转后缀表达式的功能 MyBC.java
  3. 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java
  4. 上传测试代码运行结果截图和码云连接

二、实验截图

测试代码运行结果截图以下:java

上图为MyBC.java功能截图;git

上图为MyDC.java功能截图;算法

三、码云连接

MyBC.java : https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/MyBC.java数据库

MyDC.java : https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/MyDC.java编程

TestMyBC.java : https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/Test/TestMyBC.java数组

TestMyDC.java : https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/Test/TestMyDC.java安全

注:上述代码实现的是整数状况下的加减乘除运算,若要求实现分数运算功能,详见码云连接:分数功能的四则运算项目连接服务器

2、网络编程与安全-2

一、检查点要求

结对编程:1人负责客户端,一人负责服务器网络

  1. 注意责任归宿,要会经过测试证实本身没有问题
  2. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  3. 客户端让用户输入中缀表达式,而后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式经过网络发送给服务器
  4. 服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  5. 客户端显示服务器发送过来的结果
  6. 上传测试结果截图和码云连接

二、实验截图

测试代码运行结果截图以下:

上图为单机测试;

上图为客户端测试;

服务器端测试截图详见搭档博客。

三、码云连接

Client.java:https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Client.java

Server.java:https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Server.java

3、网络编程与安全-3

一、检查点要求

加密结对编程:1人负责客户端,一人负责服务器

  1. 注意责任归宿,要会经过测试证实本身没有问题
  2. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  3. 客户端让用户输入中缀表达式,而后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后经过网络把密文发送给服务器
  4. 服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,能够用数组保存),而后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  5. 客户端显示服务器发送过来的结果
  6. 上传测试结果截图和码云连接

二、实验截图

测试结果截图以下:

上图为单机测试(客户端);

上图为单机测试(服务器);

上图为客户端联机测试;

服务器联机测试见搭档博客;

三、码云连接

码云连接:

Client_2.java:https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Client_2.java

Server_2.java:https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Server_2.java

Skey.java:https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Skey.java

Skey_kb.java:https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Skey_kb.java

4、网络编程与安全-4

一、检查点要求

密钥分发结对编程:1人负责客户端,一人负责服务器

  1. 注意责任归宿,要会经过测试证实本身没有问题
  2. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  3. 客户端让用户输入中缀表达式,而后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密经过网络把密文发送给服务器
  4. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
  5. 服务器接收到后缀表达式表达式后,进行解密,而后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  6. 客户端显示服务器发送过来的结果
  7. 上传测试结果截图和码云连接

二、实验截图

测试结果截图如图所示:

上图为单机测试(客户端);

上图为单机测试(服务器);

上图为客户端联机测试;

服务器联机测试见搭档博客;

三、码云连接

码云连接:

https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Client_3.java

https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/KeyAgree.java

https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Key_DH.java

https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Server_3.java

5、网络编程与安全-5

一、检查点要求

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

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

  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/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Client_4.java

https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/DigestPass.java

https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Server_4.java


附:遇到的问题

一、StringBuffer类的测试

在Test类的assertEquals()中不能调用两个StringBuffer类做比较,最好用.toString()方法转化为字符串进行比较。

二、JAVA中的goto语句

在检查点1的开发中,我忽然想用一个“JAVA中的goto语句”实现。上网查询连接以下:

http://blog.51cto.com/lavasoft/178997

三、错误:java.net.SocketException: Connection reset

参考连接:

https://blog.csdn.net/u013766398/article/details/51381852/

解决办法:

一、网络编程时未正确捕获java.net.SocketException, 客户端先关闭就会报这个异常;(检查发送数据是否符合服务器接收格式,否则的话服务器会自动断开链接,这样,socket就会被关闭,那么你就不能使用IO流读取数据,这样就会报这个错误)

二、数据库和应用服务器的网段不一样(这个查看一下,可能性较小)

三、好像说防火墙的比较多。。。。(试一下,关闭)

四、大部分是网络的缘由。提交post的东西多,而后服务器接收就超时了(这个只能说通常可能性较小)

四、关于byte数组和对象的相互转化

首先要明确的是,转化有特定的条件。bytes在反序列化为Object的前提是byte[]是经过ObjectOutputStream序列化的,不然直接将一个任意的byte[]转换成Object时会报错,错误信息为:

java.io.StreamCorruptedException: invalid stream header:

转化方法——Byte[] 2 Object:

(byte b[])
ObjectInputStream ois = new ObjectInputStream (new ByteArrayInputStream (b));
Object o = ois.readObject();

Object 2 Byte[]:

(Object obj)
byte b[] = null;
ByteArrayInputStream bais = new ByteArrayInputStream();
ObjectOutputStream oos = new ObjectOutputStream(bais);
oos.writeObject(obj);

五、参考连接

Java 密码学算法:http://www.cnblogs.com/rocedu/p/6683948.html

相关文章
相关标签/搜索