疯狂java实验五数据流编程_2017-2018-2 20165209 实验五《网络编程与安全》实验报告...

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

实验报告封面

北京电子科技学院(BESTI)

实 验 报 告

课程:Java程序设计 班级:1652 姓名:陈思兵 学号:20165209

成绩: 指导教师:娄嘉鹏 实验日期:2018年5月28日

实验密级: 预习程度: 实验时间:13:45 - 3:25

仪器组次: 09 必修/选修:必修 实验序号:实验五

实验名称: 网络编程与安全

实验目的:

1.实现中缀表达式转后缀表达式的功能

2.实现客户端与服务器的链接

3.实现后缀表达式计算功能

4.实现输入加密解密

5.实现密钥传递

实验与要求:

1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程

2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导

3.严禁抄袭。

实验内容及步骤

(一)网络编程与安全--1

参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA

结对实现中缀表达式转后缀表达式的功能 MyBC.java

结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java

上传测试代码运行结果截图和码云链接

bc3fa29cc7971204928f2a8166684aba.png

中缀和后缀

表达式Exp = S1 + OP + S2(S1 ,S2是两个操作数,OP为运算符)有三种标识方法:

OP + S1 + S2 为前缀表示法

S1 + OP + S2 为中缀表示法

S1 + S2 + OP 为后缀表示法

例如:Exp = a * b + (c - d / e) * f

前缀式: + * a b * - c / d e f

中缀式: a * b + c - d / e * f

后缀式: a b * c d e / - f * +

MyDC关键代码

f92dd9089f4311d16bd54f0c74c8cc50.png

MyBC关键代码

6dfb1e55bbddc5393db03c8908e774bc.png

运行结果

2eff5c8049959b06d319cddf67ac8a1a.png

df7d2b7103e96b790fee8a53b39b6e71.png

(二)网络编程与安全--2

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

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

客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器

服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端

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

客户端的程序使用Socket类建立负责连接到服务器的套接字对象。

建立连接到服务器的套接字对象:

try{ Socket mysocket=new Socket(“http://192.168.0.78”,1880);

}

catch(IOException e){ }

与mysocket相关的方法:

getInputStream()获得一个输入流

getOutputStream()获得一个输出流

用getInputStream()得到的输入流接到另一个DataInputStream数据流上

用getOutputStream()得到的输出流接到另一个DataOutputStream数据流上

参考书上第13章代码

d2909f87422b08db747b18239572992b.png

172343cc4db93d0b2eae32cb34f7dfda.png

客户端Client关键代码

6800c04f72f8e74cc733d40ccc0a9985.png

服务器端Server关键代码

9cb498d2038bc1b24d7599ef7400459b.png

运行结果

94470b82db94887cf6219de5488c7f8b.png

2bbdf1acb857d77eda8edeedddb50cd6.png

网络编程与安全--3

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

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

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

服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端

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

实现AES加密

702fb5a9991fa31c19da2d69afa1f5c6.png

客户端Client关键代码

90266a13e4c9b2e66332df1588a737ce.png

服务器端Server关键代码

0dba91780434ab8862ab038100611902.png

运行结果

700b5cd27096b6089ec2aa3f45f15643.png

b7e9ef029c60c7ee862308529f6035a8.png

网络编程与安全--4

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

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

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

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

服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端

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

实现DH算法

DH算法中,A可以用自己的密钥和B的公钥按照一定方法生成一个密钥,B也可以用自己的密钥和A的公钥按照一定方法生成一个密钥,由于一些数学规律,这两个密钥完全相同。这样,A和B间就有了一个共同的密钥可以用于各种加密。

编程思路:

Java中KeyAgreement类实现了密钥协定,它使用init( )方法传入自己的私钥,使用doPhase( )方法传入对方的公钥,进而可以使用generateSecret( )方法生成共享的信息

011b4529a80fe089a223f20e93f211d8.png

29c70e6793d2437c3bc4f17208a6f8ea.png

8254f74681dcd2cdde1c13e737e90f63.png

db5e8d9365a92b2f814d4e7970d5fb40.png

cddfef1cd252d1ca83c85374506edb83.png

客户端Client关键代码

22c6bbea2801487dfc62a990ffe81754.png

服务器端Server关键代码

38a4138bc55699229636720cd61733ed.png

运行结果

1143ea7d35033df6b1eb33cb783d7e63.png

91496883e29e08748267f65c3197d16e.png

网络编程与安全--5

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

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

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

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

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

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

MD5算法思想

首先生成对象,执行其update()方法可以将原始数据传递给该对象,然后执行其digest( )方法即可得到消息摘要。

(1) 生成MessageDigest对象

(2) 传入需要计算的字符串

(3) 计算消息摘要

(4) 处理计算结果

cb25e537aadbe3a873da59aae0113dad.png

客户端Client关键代码

d96a62daeb6728d9195c3e3c30898dbd.png

服务器端Server关键代码

cf3b73a622365192abae8cfa4da30dbb.png

运行结果

501c7032c1a1ed2e4276889f5820a137.png

de652a291f57ea48192b80cb783921d4.png

PSP(Personal Software Process)时间统计:

步骤

耗时

百分比

需求分析

30min

9.09%

设计

90min

18.1%

代码实现

120min

36.3%

测试

60min

18.1%

分析总结

30min

9.09%

实验感想

本次实验不仅加深了对java数据结构中栈的知识,更巩固了13章的java网络方面的知识。

参考资料

原文:https://www.cnblogs.com/tutu233/p/9105406.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值