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

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

中缀和后缀

表达式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关键代码

MyBC关键代码

运行结果

(二)网络编程与安全--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章代码

客户端Client关键代码

服务器端Server关键代码

运行结果

网络编程与安全--3

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

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

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

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

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

实现AES加密

客户端Client关键代码

服务器端Server关键代码

运行结果

网络编程与安全--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( )方法生成共享的信息

客户端Client关键代码

服务器端Server关键代码

运行结果

网络编程与安全--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) 处理计算结果

客户端Client关键代码

服务器端Server关键代码

运行结果

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

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

  1. Java语言与系统设计笔记(II:从多线程开发到网络编程)

    ch6.Java多线程开发 6.1 进程与线程的概念 进程(Process):操作系统中能够"同时"运行的多个应用程序(QQ.浏览器.Word.WPS). 线程(Thread):一 ...

  2. tcpip网络编程 尹圣雨源码_网络编程——学习笔记

    一.计算机网络 1.简介 计算机网络,是把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多计算机可以方便的相互传递信息,共享硬件.软件.数据等资源.计 ...

  3. android 网络编程实现,Android开发使用HttpURLConnection进行网络编程详解【附源码下载】...

    本文实例讲述了Android开发使用HttpURLConnection进行网络编程.分享给大家供大家参考,具体如下: --HttpURLConnection URLConnection已经可以非常方便 ...

  4. python的基础网络编程是下列_Python入门基础之网络编程、socket编程、TCP、UDP编程...

    忙了两天,继续更文!希望多多支持. 套接字 套接字是一种具有之前所说的"通讯端点"概念的计算机网络数据结构.网络化的应用程序在开始任何通讯之前都必需要创建套接字. 套接字有三种: ...

  5. python交互式编程客户端_【python】UDP网络编程:实现服务端与客户端的交互、简单的AI智能模式...

    关于UDP网络编程 UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层.UDP是面向非连接的协议,它不与对方建立连接,而是直接把要发的数据发给对方. [UDP网络 ...

  6. c++网络编程连接成功后回调onconnected_谈谈网络编程(基于C++)

    这里讲了一点网络编程的一些新路,一点体悟.学习就是这种不断总结提高的过程. 设计到进程,线程,线程池,reactior和proactor并发编程模式,IOCP,linux下的epoll..... 讲到 ...

  7. php事件编程,php如何实现基于事件驱动的网络编程

    php 如何实现基于事件驱动的网络编程 场景 当客户端发送数据到服务端,服务端返回相同信息. 保持连接 说明 接下来的所有代码仅用于简单的小demo 生产环境需要考虑代码的严谨性. 例子一 简单的接受 ...

  8. python网络编程讲解_详解Python Socket网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  9. 网络编程——listen、conect、inet_pton等网络编程函数详解

    前言 自己在学习网络编程的所思所感所悟,记录于此,如果还有幸能帮助到您,是我的荣幸!很多网络编程的函数都没有见过也忘记了他的头文件,怎么办?在linux上使用man手册查函数即可,windows查ms ...

  10. java.net.url 兼容_java.net.Url类的应用(网络编程)

    一.认识URL 类 URL 代表一个统一资源定位符,它是指向互联网"资源"的指针.资源可以是简单的文件或目录,也可以是更为复杂的对象的引用,例如对数据库或搜索引擎的查询. 简单的可 ...

最新文章

  1. Windows Server 2008常见的安全设置
  2. 墙裂推荐!卡神力作《代码随想录》,上架首日卖爆!
  3. B端产品方法论:从流量思维转向客户服务
  4. xmselect重新渲染_Layui使用总结及多选方案Xm-select
  5. linux安装mysql5.7.19
  6. 软件工程--第五章-- 总体设计
  7. 在ASP.NET项目中使用CKEditor +CKFinder实现图片上传功能
  8. LINQ - 對付 SQL Injection 的 免費補洞策略 (转)
  9. mysql 占用的解决_解决 MySQL 突然占用全部内存的问题
  10. 人工智能时代,Python编程就业方向那么广,我该如何选择?
  11. Eclipse ,Ant编译 jbpm.war包
  12. 【转载】关于.NET下开源及商业图像处理(PSD)组件
  13. 9.看板方法---建立输入节奏
  14. gunicorn的用法
  15. Connection terminated as request was larger than 10485760.
  16. 怎么搜索计算机共享盘,怎样查找其他计算机上的共享文件
  17. webbug靶场-渗透基础
  18. 如何写PRD文档[最全版]
  19. 【时空序列】AAAI2021| 利用时空融合图神经网络进行交通流量预测
  20. 模拟集成电路设计学习笔记(一)IC617工艺库安装

热门文章

  1. Java常用api和操作必背
  2. windows下 dos 执行php 代码
  3. Eclipse中JSP生成的class文件去了哪里?(转)
  4. C# 窗口大小及屏幕分辨率操作
  5. C# 如何在空间运行时调整控件位置和大小
  6. CentOS 7安装MongoDB
  7. Linux性能调优集合
  8. 如何考虑程序的优化性
  9. 不要有思维的惯性, 做每件事情之前, 都【确认好要做什么】!
  10. 【Oracle】redo与undo