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

一、网络编程与安全-1

1、检查点要求

两人一组结对编程:
0. 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA

  1. 结对实现中缀表达式转后缀表达式的功能 MyBC.java
  2. 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java
  3. 上传测试代码运行结果截图和码云链接

2、实验截图

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

上图为MyBC.java功能截图;

上图为MyDC.java功能截图;

3、码云链接

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

1、检查点要求

结对编程:1人负责客户端,一人负责服务器
0. 注意责任归宿,要会通过测试证明自己没有问题

  1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器
  3. 服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  4. 客户端显示服务器发送过来的结果
  5. 上传测试结果截图和码云链接

2、实验截图

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

上图为单机测试;

上图为客户端测试;

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

3、码云链接

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

1、检查点要求

加密结对编程:1人负责客户端,一人负责服务器
0. 注意责任归宿,要会通过测试证明自己没有问题

  1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后通过网络把密文发送给服务器
  3. 服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  4. 客户端显示服务器发送过来的结果
  5. 上传测试结果截图和码云链接

2、实验截图

测试结果截图如下:

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

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

上图为客户端联机测试;

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

3、码云链接

码云链接:

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

1、检查点要求

密钥分发结对编程:1人负责客户端,一人负责服务器
0. 注意责任归宿,要会通过测试证明自己没有问题

  1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文发送给服务器
  3. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
  4. 服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  5. 客户端显示服务器发送过来的结果
  6. 上传测试结果截图和码云链接

2、实验截图

测试结果截图如图所示:

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

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

上图为客户端联机测试;

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

3、码云链接

码云链接:

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

1、检查点要求

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

完整性校验结对编程:1人负责客户端,一人负责服务器
0. 注意责任归宿,要会通过测试证明自己没有问题

  1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文和明文的MD5値发送给服务器
  3. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
  4. 服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  5. 客户端显示服务器发送过来的结果
  6. 上传测试结果截图和码云链接

2、实验截图

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

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

上图为客户端联机测试;

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

3、码云链接

码云链接:

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


附:遇到的问题

1、StringBuffer类的测试

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

2、JAVA中的goto语句

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

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

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

参考链接:

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

解决办法:

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

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

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

4、大部分是网络的原因。提交post的东西多,然后服务器接收就超时了(这个只能说一般可能性较小)

4、关于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);

5、参考链接

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

posted @ 2018-05-26 16:12  Maxeys  阅读(356)  评论(1编辑  收藏  举报