20145206《Java程序设计》实验五 Java网络编程及安全
实验内容
1.掌握Socket程序的编写;
2.掌握密码技术的使用;
3.设计安全传输系统。
实验步骤
我和20145105姜丽结对编程,我设计客户端的部分。
姜丽的博客园主页:http://www.cnblogs.com/schwarizard/
<1>首先建立一个Socket对象,用来连接特定服务器的指定端口,输入的参数是ip地址和端口,注意ip地址是服务器的ip地址,即运行服务器的那台主机的ip地址。
怎么查看主机的ip地址呢?在命令行中输入ipconfig即可。在我的计算机上执行如下:
<2>然后用BufferedReader对象获得从服务器传来的网络输入流,用PrintWriter对象获得从客户端向服务器输出数据的网络输出流,用BufferedReader对象创建键盘输入流,以便客户端从键盘上输入信息。以上根据TCP的客户端代码编写。
<3>下一步是先用RSA算法加密DES的秘钥,加密采用服务器的公钥。将加密后的秘钥传送给服务器。
<4>然后用DES算法加密明文,将密文传到服务器。
<5>然后计算明文的Hash函数值,传送给服务器。
以上用到的加密算法、秘钥、Hash函数计算过程均利用的老师提供的代码。
<6>最后从网络输入流读取结果,把从服务端返回的结果输出出来。
·代码写好后,先运行服务器,再运行客户端,显示“服务器已经启动后”启动客户端,,连接成功会显示“已经建立连接”,然后就可以从客户端输入数据发送到服务器了。
我的客户端显示结果为:
产生的问题及解决办法:
问题1:出现系统找不到指定文件的问题
解决办法:将Skey_RSA_pub.dat、Skey_RSA_priv.dat拷贝至与src同级的文件夹内
问题2:把Skey_RSA_priv.dat、Skey_RSA_pub.dat拷贝至与src同级的文件夹内之后,发现还是会出现如图所示的问题:
解决办法:在程序调用这个文件前加上指定路径:
C:\\Users\\Administrator\\IdeaProjects\\untitled8\\src\\Skey_RSA_pub.dat
这样问题就解决了!
问题3:会出现连接超时的情况。
解决办法:我们之前连的是服务器的手机热点,后来改用360wi-fi,并且IP地址输入正确,问题就解决啦!
客户端实验代码如下:
package Client;
// file name��ComputeTCPClient.java
import java.net.*;
import java.io.*;
public class ComputeTCPClient {
public static void main(String srgs[]) {
try {
Socket socket = new Socket("172.20.10.5", 4000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入待发送的数据:");
String str=stdin.readLine();
Enc_RSA encode = new Enc_RSA(str);
String s=encode.encodedata;
out.println(s);
str=in.readLine();
System.out.println( "从服务器接收到的结果为:"+str);
}
catch (Exception e) {
System.out.println(e);
}
finally{
//stdin.close();
//in.close();
//out.close();
//socket.close();
}
}
}
package Client;
import java.io.*;
import java.math.BigInteger;
import java.security.interfaces.RSAPublicKey;
public class Enc_RSA {
public String encodedata="";
public Enc_RSA(String s) throws Exception{
FileInputStream f=new FileInputStream("C:\\Users\\Administrator\\IdeaProjects\\untitled8\\src\\Skey_RSA_pub.dat");
ObjectInputStream b=new ObjectInputStream(f);
RSAPublicKey pbk=(RSAPublicKey)b.readObject( );
BigInteger e=pbk.getPublicExponent();
BigInteger n=pbk.getModulus();
byte ptext[]=s.getBytes("UTF8");
BigInteger m=new BigInteger(ptext);
BigInteger c=m.modPow(e,n);
String cs=c.toString( );
encodedata=cs;
}
}
实验心得体会
本次实验主要练习如何把不同的代码放入到一个程序中实现功能,代码部分老师已经给出,关键在于拼凑代码以及对于代码的理解,通过这一周对于“网络编程安全”这篇博客的学习以及同学之间的讨论,大概了解了代码内容,希望可以通过实践掌握、运用。
PSP时间
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 20min | 16.7% |
设计 | 40min | 33.3% |
代码实现 | 20min | 16.7% |
测试 | 20min | 16.7% |
分析总结 | 20min | 16.7% |
20145206《Java程序设计》实验五Java网络编程及安全的更多相关文章
-
20155205《Java程序设计》实验五(网络编程与安全)实验报告
20155205 <Java程序设计>实验五(网络编程与安全)实验报告 一.实验内容及步骤 (一) 两人一组结对编程 参考http://www.cnblogs.com/rocedu/p/6 ...
-
20165230 《Java程序设计》实验五《网络编程与安全》实验报告
20165230 <Java程序设计>实验五<网络编程与安全>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: ...
-
20145207《Java程序设计》实验五(网络编程与安全)实验报告
<Java 程序设计>实验五(网络编程与安全)实验报告 目录 改变 网络编程与安全实验要求 实验成果 课后思考 改变 修改了之前仅仅是贴了图片,连代码都没粘的状态.不过这篇博客我只能做到写 ...
-
20155218 《Java程序设计》实验五(网络编程与安全)实验报告
20155218 <Java程序设计>实验五(网络编程与安全)实验报告 一.实验内容及步骤 (一) 编写MyBC.java实现中缀表达式转后缀表达式的功能 编写MyDC.java实现从上面 ...
-
20155236 《Java程序设计》实验五(网络编程与安全)实验报告
20155236 <Java程序设计>实验五(网络编程与安全)实验报告 一.实验内容及步骤 任务一: 编写MyBC.java实现中缀表达式转后缀表达式的功能 编写MyDC.java实现从上 ...
-
20155304 2016-2017-2 《Java程序设计》实验五(网络编程与安全)实验报告
20155304 2016-2017-2 <Java程序设计>实验五(网络编程与安全)实验报告 实验内容及步骤: 一.两人一组结对编程: 参考http://www.cnblogs.com/ ...
-
20155310《Java程序设计》实验五(网络编程与安全)实验报告
20155310<Java程序设计>实验五(网络编程与安全)实验报告 一.实验内容及步骤 •任务一: 编写MyBC.java实现中缀表达式转后缀表达式的功能 编写MyDC.java实现从上 ...
-
20155311《Java程序设计》实验五(网络编程与安全)实验报告
20155311<Java程序设计>实验五(网络编程与安全)实验报告 一.实验内容及步骤 任务一: 编写MyBC.java实现中缀表达式转后缀表达式的功能 编写MyDC.java实现从上面 ...
-
20155318 《Java程序设计》实验五 (网络编程与安全)实验报告
20155318 <Java程序设计>实验五 (网络编程与安全)实验报告 实验内容 了解计算机网络基础 掌握Java Socket编程 理解混合密码系统 掌握Java 密码技术相关API的 ...
-
20155319 《Java程序设计》实验五(网络编程与安全)实验报告
20155319 <Java程序设计>实验五(网络编程与安全)实验报告 一.实验内容及步骤 (一) 两人一组结对编程 参考http://www.cnblogs.com/rocedu/p/6 ...
随机推荐
-
Ant:build.xml 结构
Ant build.xml 结构 project target task data property datatype v\:* {behavior:url(#default#VML);} o\:* ...
-
C# 词法分析器(四)构造 NFA
系列导航 (一)词法分析介绍 (二)输入缓冲和代码定位 (三)正则表达式 (四)构造 NFA (五)转换 DFA (六)构造词法分析器 (七)总结 有了上一节中得到的正则表达式,那么就可以用来构造 N ...
-
windows下使用adb工具查看android程序cpu和内存消耗情况
在实际的开发当中,尤其软件运行在一个硬件设备比较差的环境下,对软件占用资源大的问题是开发者们必须要解决的问题,系统比较卡.觉得应该看看程序的cpu和内存消耗 一直以来都在windows下编程,已经习惯 ...
-
Codeforces Round #313 (Div. 1) A. Gerald&#39;s Hexagon
Gerald's Hexagon Problem's Link: http://codeforces.com/contest/559/problem/A Mean: 按顺时针顺序给出一个六边形的各边长 ...
-
ThinkPHP3.1新特性:命名范围
概述 命名范围功能,给模型操作提供了一系列的(连贯操作)封装,让你更方便的查询和操作数据.我们来具体了解下这一用法. 定义属性 要使用命名范围功能,主要涉及到模型类的_scope属性定义和scope连 ...
-
Numpy中Meshgrid函数介绍及2种应用场景
近期在好几个地方都看到meshgrid的使用,虽然之前也注意到meshgrid的用法.但总觉得印象不深刻,不是太了解meshgrid的应用场景.所以,本文将进一步介绍Numpy中meshgrid的用法 ...
-
关于Tomcat
详情转自:http://blog.csdn.net/jiuqiyuliang/article/details/48094373和http://blog.csdn.net/u012934325/arti ...
-
DirectX11 With Windows SDK--20 硬件实例化与视锥体裁剪
前言 这一章将了解如何在DirectX 11利用硬件实例化技术高效地绘制重复的物体,以及使用视锥体裁剪技术提前将位于视锥体外的物体进行排除. 在此之前需要额外了解的章节如下: 章节回顾 18 使用Di ...
-
Hadoop HDFS, YARN ,MAPREDUCE,MAPREDUCE ON YARN
HDFS 系统架构图 NameNode 是主节点,存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等.NameNode将 ...
-
Codeforces 677 - A/B/C/D/E - (Undone)
链接: A - Vanya and Fence - [水] AC代码: #include<bits/stdc++.h> using namespace std; ; int n,h; in ...