博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20145219 《Java程序设计》实验五 Java网络编程及安全实验报告
阅读量:5098 次
发布时间:2019-06-13

本文共 3301 字,大约阅读时间需要 11 分钟。

20145219 《Java程序设计》实验五 Java网络编程及安全实验报告

实验内容

1.掌握Socket程序的编写;

2.掌握密码技术的使用;

3.设计安全传输系统。

实验步骤

我和结对编程,我设计服务器部分。

  • 确定服务器端IP地址和端口

    用设计服务器的电脑打开cmd命令行,在其中输入ipconfig查询服务器的IPv4地址并让负责客户端的用户记录下来,创立一个端口号且服务器和客户端一致(最好不要为8080、8030这些常见的,我们先后使用了10001、10002和9999,最后9999成功了)。

    884666-20160508001202406-1557837986.png

  • 编写代码

    1.建立一个Socket对象,用来建立一个端口号与客户端相连,获得网络输入流与输出流对象的引用。

    2.使用服务器端RSA的私钥对DES的密钥进行解密,对秘钥进行解密之后使用DES对密文进行解密。

    3.计算解密后的hash值来确定解密是否正确。

    注:加密算法、秘钥、Hash函数计算过程均利用的老师提供的代码

    服务器代码如下:

    import java.net.*;  import java.io.*;  import java.security.*;  import java.security.spec.*;  import javax.crypto.*;  import javax.crypto.spec.*;  import javax.crypto.interfaces.*;  import java.security.interfaces.*;  import java.math.*;  public class ComputeTCPServer{      public static void main(String srgs[]) throws Exception      {          ServerSocket sc = null;          Socket socket=null;          try          {              sc= new ServerSocket(9999);//创建服务器套接字              System.out.println("端口号:" + sc.getLocalPort());              System.out.println("服务器已经启动...");              socket = sc.accept();   //等待客户端连接              System.out.println("已经建立连接");//获得网络输入流对象的引用              BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));//获得网络输出流对象的引用              PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);              //使用服务器端RSA的私钥对DES的密钥进行解密              String aline2=in.readLine();              BigInteger c=new BigInteger(aline2);              FileInputStream f=new FileInputStream("Skey_RSA_priv.dat");              ObjectInputStream b=new ObjectInputStream(f);              RSAPrivateKey prk=(RSAPrivateKey)b.readObject( );              BigInteger d=prk.getPrivateExponent();              BigInteger n=prk.getModulus();              BigInteger m=c.modPow(d,n);              byte[] keykb=m.toByteArray();              //使用DES对密文进行解密              String aline=in.readLine();//读取客户端传送来的数据              byte[] ctext=parseHexStr2Byte(aline);              Key k=new  SecretKeySpec(keykb,"DESede");              Cipher cp=Cipher.getInstance("DESede");              cp.init(Cipher.DECRYPT_MODE, k);              byte []ptext=cp.doFinal(ctext);              String p=new String(ptext,"UTF8");              System.out.println("从客户端接收到信息为:"+p); //通过网络输出流返回结果给客户端              //使用Hash函数检测明文完整性              String aline3=in.readLine();              String x=p;              MessageDigest m2=MessageDigest.getInstance("MD5");              m2.update(x.getBytes( ));              byte a[ ]=m2.digest( );              String result="";              for (int i=0; i
  • 匹配连接

    1.运行服务器端代码;

    2.显示“服务器已经启动后”运行客户端代码;

    3.显示“已经建立连接”就证明双方已经连接好了;

    4.客户端输入要传输的信息;

    5.服务器端显示从客户端接受到的信息;

    6.双方匹配成功,并在客户端显示“匹配成功”的消息。

    884666-20160508001338250-1119162930.png

884666-20160508001350453-1094034846.png

实验中的问题和解决过程

  • 问题1:运行后显示错误“系统找不到指定文件”。
  • 解决:Skey_RSA_priv.dat拷贝至与src同级的文件夹内。
  • 问题2:服务器启动后客户端显示错误java.net.SocketException: Connection reset(连接重置)
  • 解决:没有关闭上次运行的窗口,端口号被占用,关闭上次运行的窗口后就可以成功了。
  • 问题3:服务器启动后客户端显示错误`java.net.ConnectException: Connection timed out: connect(连接超时).
  • 解决:我们推断可能是网络连接有问题。我们最初同时使用cmcc-edu,结果为连接超时;然后,我们连接同一台手机散发的热点,结果仍然为连接超时;最后,我用服务器端的电脑给客户端散发WiFi,结果终于成功。

    实验代码托管截图

    884666-20160508001549421-161392797.png

本次实验代码行数

884666-20160508001559406-1589723534.png

PSP(Personal Software Process)时间

步骤 耗时 百分比
需求分析 10min 12.50%
设计 20min 25.00%
代码实现 20min 25.00%
测试 20min 25.00%
分析总结 10min 12.50%

参考资料

  • ...

转载于:https://www.cnblogs.com/20145219songge/p/5469584.html

你可能感兴趣的文章
山东历史沿革 (zz)
查看>>
编程注意事项
查看>>
MySQL innodb中各种SQL语句加锁分析
查看>>
继续学习C:数字进制表示
查看>>
Java开发牛人十大必备网站
查看>>
荐读|属性与可直接访问的数据成员之间应该如何选
查看>>
angular中的$http服务
查看>>
一步一步分析Caliburn.Micro(三:绑定执行方法ActionMessage是怎么执行的)
查看>>
Sublime Text快捷键
查看>>
.NET 微信开放平台接口
查看>>
js、jquery报错
查看>>
IOS 多线程(3) --线程安全
查看>>
Git上传时,忽略多个不想上传的文件——每周汇总(第一周)
查看>>
Volley
查看>>
【转载】async await 异步编程详解
查看>>
基于上下文的防火墙
查看>>
计算机硬盘大小转换(B,KB,MB,GB,TB,PB之间的大小转换)
查看>>
PCB SQL SERVER 发送邮件(异步改同步)
查看>>
类方法@classmethod、属性方法@property、静态方法 @staticmethod
查看>>
计数方法,博弈论(扫描线,树形SG):HDU 5299 Circles Game
查看>>