java程序实验报告_20145227 《Java程序设计》实验五实验报告

20145227 《Java程序设计》实验五实验报告

实验内容

1.掌握Socket程序的编写;

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

3.设计安全传输系统。

实验过程

1.先运行TCP代码,一人服务器,一人客户端。

2.下载加解密代码,先编译运行代码,一人加密一人解密。

3.集成代码,一人加密后通过TCP发送,加密使用AES或DES。AES或DES加密密钥Key的发送,使用服务器的公钥加密,公钥算法用RSA或DH。

在本次结对编程中,我和20145240刘士嘉(http://www.cnblogs.com/20145240lsj/) 结对合作,我负责的是服务器的部分, 首先建立一个端口号启动服务器并与客户端相连,获得网络输入流与输出流对象的引用,接着使用服务器端RSA的私钥对DES的密钥进行解密,对秘钥进行解密之后使用DES对密文进行解密;然后计算解密后的hash值来确定解密是否正确。

确定服务器端IP地址和端口:打开cmd命令行,在其中输入ipconfig查询服务器的IPv4地址并让负责客户端的用户记录下来,创立一个端口号且服务器和客户端一致。我们用的号是8080。

716087d4ee8a5c46f958e22f077d63cb.png

代码写好后,先运行服务器,再运行客户端,显示“服务器已经启动后”启动客户端,,连接成功会显示“已经建立连接”,然后就可以从客户端输入数据发送到服务器了。

467dbfdd12371da12837f39d8f546747.png

67e765b30ff4e146b4207955b150999c.png

服务器的代码如下:

package nine;

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(8080);//创建服务器套接字

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

{

result+=Integer.toHexString((0x000000ff & a[i]) |

0xffffff00).substring(6);

}

System.out.println(result);

if(aline3.equals(result))

{

System.out.println("匹配成功");

}

out.println("匹配成功");

out.close();

in.close();

sc.close();

} catch (Exception e) {

System.out.println(e);

}

}

public static byte[] parseHexStr2Byte(String hexStr)

{

if (hexStr.length() < 1)

return null;

byte[] result = new byte[hexStr.length()/2];

for (int i = 0;i< hexStr.length()/2; i++)

{

int high = Integer.parseInt(hexStr.substring(i*2, i*2+1 ), 16);

int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);

result[i] = (byte) (high * 16 + low);

}

return result;

}

public static String parseByte2HexStr(byte buf[]) {

StringBuffer sb = new StringBuffer();

for (int i = 0; i < buf.length; i++)

{

String hex = Integer.toHexString(buf[i] & 0xFF);

if (hex.length() == 1)

{

hex = '0' + hex;

}

sb.append(hex.toUpperCase());

}

return sb.toString();

}

}

遇到的问题及解决方法

问题1:运行后显示错误系统找不到指定文件。

解决:将Skey_RSA_priv.dat拷贝至与src同级的文件夹内。

问题2:服务器启动后客户端显示错误java.net.SocketException: Connection reset(连接重置)。

解决:没有关闭上次运行的窗口,端口号被占用,关闭上次运行的窗口后就可以成功了。

实验总结与感想

本次实验我负责的是服务器的部分。实验中我们使用了现成的DES和RSA算法,但是由于刚开始编写程序时对于加密密钥的来源和位置没有理解透彻,以至于之后程序的运行中总是报错。之后调整了我们的IP地址和端口号,以及Skey_RSA_priv.dat文件的位置后,我们终于得出了理想的成果。这是本学期最后一次java实验,我通过动手实验加深了对于java编程的理解,也意识到还需不断努力、不断提高。最后,感谢娄老师的悉心教导!

PSP(Personal Software Process)时间

步骤

耗时

百分比

需求分析

20min

22%

设计

20min

22%

代码实现

10min

11%

测试

30min

34%

分析总结

10min

11%

参考资料

20145222黄亚奇《Java程序设计》实验五实验报告

20145222 实验五实验报告 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 本次实验我的结对编程对象是20 ...

20145315 《Java程序设计》实验五实验报告

20145315 实验五实验报告 实验五 Java网络编程 我负责服务器部分,王嘉澜负责客户端部分:http://www.cnblogs.com/SJZGM10/p/5 ...

20145120 《Java程序设计》实验五实验报告

20145120 实验五实验报告 实验名称:Java网络编程 实验内容: 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验内容. ...

20145314郑凯杰 《Java程序设计》实验五 实验报告

20145314郑凯杰 实验五 实验报告 实验搭档王亦徐:http://www.cnblogs.com/1152wyx/p/5471524.html 实验要求 完成实验 ...

20145328 《Java程序设计》实验五实验报告

20145328 实验五实验报告 实验名称 Java网络编程 实验内容 用书上的TCP代码,实现服务器与客户端. 客户端与服务器连接 客户端中输入明文,利用DES算法加 ...

20145330《Java程序设计》第一次实验报告

20145330第一次实验报告 实验一Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Ja ...

20145320《Java程序设计》第一次实验报告

20145320第一次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.08 18: ...

20145317彭垚 《Java程序设计》第一次实验实验报告

20145317彭垚 第一次实验实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验名称:Java开发环境的 ...

&num;《JAVA程序设计》 20155214 实验五 网络编程与安全

20155214 实验五 网络编程与安全 实验内容 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验要求 要求一 结对实现中缀表达式转后缀 ...

随机推荐

How to Take Control of Your Line Height in Outlook&period;com

Reference to: http://www.emailonacid.com/blog/details/C13/line_height_and_outlook.com

SQL不同服务器数据库之间的数据操作整理&lpar;完整版&rpar;

---------------------------------------------------------------------------------- -- Author : htl25 ...

Linux下的特殊权限SetUID

1.SetUID的功能 只有可以执行的二进制程序才能设置SUID权限 命令执行者要对改程序拥有x执行权限 命令执行者在执行改程序的时候获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属性) ...

instruction-set architecture Processor Architecture

Computer Systems A Programmer's Perspective Second Edition We have seen that a processor must execut ...

IOS UITextField &amp&semi;UITextView

UITextField 限制textField长度 曾经,以为输入框只是输入字符的,但真的认真为一个登陆界面输入框而改了六七次以后,发现好烦人啊,先谢谢测试的不厌其烦,不杀之恩,不想再用IOS的输入框 ...

面向对象三大特征之多态——Java笔记(七)

多态:     同一个实体同时具有多种形式     编译时的类型有声明该变量时使用的类型决定,运行时的类型有实际赋值给变量的对象决定     如果编译时类型和运行时类型不同,就出现多态 例: clas ...

jquery插件简单的声明方法

(function($){     //  声明插件内容     $.fn.pluginName = function(options){         //  默认插件配置         var ...

&lbrack;python3&period;6&plus;opencv&rsqb; 01 完成读取图片操作

学习一下opencv3 奈何vs2017配的云里雾里,还是使用python吧 --人生苦短,python来凑 --使用Pycharm操作,面向界面的Pycharm好一些吧(我猜的) 新建Project ...

rpm 命令使用 和 lsof -p 1406 使用

#安装RPM -v 显示详细信息 -h 显示进度 -i 安装 -U 升级 -q 查询 -ql 查看rpm 包装的文件 - qf 查看命令属于哪个RPM 包 -qi 查看RPM包的详细信息 [root@ ...

underscore&period;js源码解析【函数】

// Function (ahem) Functions // ------------------ // Determines whether to execute a function as a ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验Java 语言基础 1 一. 实验目的 1 二.实验内容 1 三.源程序代码 1 四.实验结果截图 6 .结果分析 7 实验二 面向对象程序设计 8 一.实验目的 8 二.实验内容 8 三.源程序代码 8 四.实验结果截图 12 .结果分析 13 实验三、异常处理程序设计 14 一.实验目的 14 二.实验内容 14 三.源程序代码 14 四.实验结果 17 .结果分析 18 实验四 图形用户界面程序设计 19 一.实验目的 19 二.实验内容: 19 三.源程序代码(核心代码) 19 四.程序设计思路 23 实验结果及分析 23 六.不足之处 26 实验 多线程程序设计 27 一.实验目的 27 二.实验内容 27 三.源程序代码 27 四.实验结果截图 29 .结果分析 30 实验六 输入输出流 31 一.实验目的 31 二.实验内容: 31 三.源程序代码 31 四.实验结果截图 36 .结果分析 37 实验七 使用 TCP 协议的 Socket 网络程序设计 38 一.实验目的 38 二.实验内容 38 三.核心源代码 39 四.实验结果截图 43 .结果分析 45 实验八 数据库应用 46 一.实验目的 46 二.实验内容 46 三.源程序代码 46 四.实验结果截图 48 .结果分析 48 附录一:学生信息管理(针对实验四文件操作的改进) 49 一. 目前界面 49 二. 改进展示 50 三. 部分代码 53 四. 总结 54 附录二:多对多聊天室(实验七扩展) 55 一. 思路 55 二. 核心代码 55 三. 截屏展示 58 四. 实验分析 60
Java程序设计实验四是一个关于事件处理和图形化用户界面的实验实验的目的是理解事件处理的机制,掌握本的事件处理方法,并且理解形化用户界面的设计,掌握Swing包中基本界面元素的使用。实验要求包括掌握图形用户界面中常见组件的名称和分类,掌握事件源、事件对象和事件监听器的概念,掌握ActionEvent和ActionListener的使用,掌握JFrame、JPanel、BorderLayout、FlowLayout、JButton、JTextField、JTextArea的使用,并且在Eclipse或Netbeans环境下完成选作实验内容,并认真撰写完整的实验报告实验步骤包括首先根据要求设计图形用户界面和程序中需要的类,定义继承自JPanel的面板类用于布局和绘制,定义继承自JFrame的类在其中完成界面的设计,定义事件监听器类完成事件处理,定义一个包含main方法的测试类,在其中创建框架类对象并显示,最后进行编译、调试和运行程序。一些实验提示包括使用面板进行页面布局,使用内部类定义事件监听器类,以及通过处理ActionEvent事件来完成按钮的点击响应。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java程序设计(四)](https://blog.csdn.net/wryf602/article/details/89047876)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [java程序设计——实验四](https://blog.csdn.net/weixin_48388330/article/details/122494766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值