20145311实验五"Java网络编程及安全"
20145311实验五 "Java网络编程及安全"
程序设计过程
实验内容
·掌握Socket程序的编写;
·掌握密码技术的使用;
·设计安全传输系统 ·利用加解密代码包,编译运行代码,一人加密,一人解密;
·集成代码,一人加密后通过TCP发送;
实验步骤
在这之前进行了一个socket连接的例子:用百度做了个实验

下面是两人合作进行RSA的加密:
首先建立一个Socket对象,用来连接特定服务器的指定端口(我负责的是服务器端,郑凯杰负责的是客户端,所以也就是输入我这边的ip地址),输入的参数是ip地址和端口(端口号应该是随意的,两个人相同就可以了),注意ip地址是服务器的ip地址,即运行服务器的那台主机的ip地址。
一开始我们始终配置不对,因为输入的ip地址不对,所以就一直是这种情况

就一直是这样,客户端那边怎么点运行,服务器端都没有一点改变
后来重新检查了一下

输入我们都连着的workgroup的ipv4的地址就行,接着就能正确匹配了。
接下来就是使用RSA算法进行加解密,这里我们要RSA算法的私钥和公钥分别放在服务器端和客户端,这样在进行加密室才不会出现找不到指定文件的错误

这是我将RSA的私钥放在我的工程下的一个截图
这样代码就可以通过了:
package com.company;
import java.net.*;import java.io.*;import java.security.*;import javax.crypto.*;import javax.crypto.spec.*;import java.security.interfaces.*;import java.math.*;
public class Main{ public static void main(String srgs[]) throws Exception { ServerSocket sc = null; Socket socket=null; try { sc= new ServerSocket(9090);//创建服务器套接字 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<a.length; 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; }}
最终结果:

实验总结与心得体会
这次的实验主要是网络编程与密码学加密解密的一个结合,两个方面都与我们的专业息息相关, 通过对那篇博客的学习,我里了解到了一些基础的网络编程的知识,对此接触还是有些困难的, 所以我参考了一下其他人写的代码,主要还是对某些类的使用不是很熟练,再有就是如何对明 文进行加密对密文进行解密,如何用java语言实现明文、密文、密钥等,还是需要进一步地去学习。
PSP(Personal Software Process)
| 步骤 | 耗时 | 百分比 |
|---|---|---|
| 需求分析 | 15min | 15 |
| 设计 | 20min | 20 |
| 代码实现 | 20min | 20 |
| 测试 | 20min | 20 |
| 分析总结 | 25min |
25 |
20145311实验五"Java网络编程及安全"的更多相关文章
- 20145213《Java程序设计》实验五Java网络编程及安全
20145213<Java程序设计>实验五Java网络编程及安全 实验内容 1.掌握Socket程序的编写. 2.掌握密码技术的使用. 3.设计安全传输系统. 实验预期 1.客户端与服务器 ...
- 20145206《Java程序设计》实验五Java网络编程及安全
20145206<Java程序设计>实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和201451 ...
- 20145337实验五Java网络编程及安全
20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...
- JAVA课程实验报告 实验五 Java网络编程及安全
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩: 指导教师:娄嘉 ...
- 20145225《Java程序设计》 实验五 Java网络编程及安全
20145225<Java程序设计> 实验五 Java网络编程及安全 实验报告 一.实验内容 基于Java Socket实现安全传输. 基于TCP实现客户端和服务器,结对编程一人负责客户端 ...
- 20145208 实验五 Java网络编程
20145208 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...
- 20145215实验五 Java网络编程及安全
20145215实验五 Java网络编程及安全 实验内容 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验步骤 本次实验我的结对编程对象是20145208蔡野,我负责编写客 ...
- 20145220 实验五 Java网络编程
20145220 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...
- 20145203 实验五 Java网络编程及安全
20145203 实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验要求 1.基于Java Socket实现安全传输 2 ...
随机推荐
- Android英文文档翻译系列(4)——PopupWindow
public class PopupWindow extends Object //直接继承至Object java.lang.Object ↳ android.widget.PopupWindow ...
- android基础---->发送和接收短信
收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这项功能,而Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.今天我们开始自己创建一个简单的发送和接收短 ...
- Egret3D初步学习笔记三 (角色使用)
一 Unity中编辑角色 仍然使用unity4.7.1_Egret3D_Dll.unitypackage. 里面含有一个角色. 二 查看人物的动画 选中lingtong 属性面板里有个Animator ...
- 企业服务的3种模式:On-Premise、SaaS、Mixed,该选哪种?--创业邦
B轮融资二三事 我们从9月份开始启动B轮融资,与这些颇具洞察力的投资人聊天,是非常有挑战的事.他们的很多观点充满智慧,能帮你突破思考局限,受益良多.当然,整个过程虽然有趣但也不轻松,毕竟你的目的是完成 ...
- 并查集hdu4424
Conquer a New Region Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- java 新手入门课程03
2017.7.6 java 课堂笔记 1.关于分支; if/else 是基于boolean 值的双分支 Switch 基于数字(包括整数 char byte 枚举, 字符串)类型的多分支 方法 ...
- Java类集框架——List接口
学习目标 掌握List接口与Collection接口的关系. 掌握List接口的常用子类:ArrayList.Vector. 掌握ArrayList与Vector类的区别. Collection ...
- scrapy爬虫系列之六--模拟登录
功能点:如何发送携带cookie访问登录后的页面,如何发送post请求登录 爬取网站:bilibili.github 完整代码:https://files.cnblogs.com/files/book ...
- Python开发【Django】:CMDB基础
浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...
- Python开发【杂货铺】:写code经常记不住的事儿
1.添加系统环境变量: 每次写程序,把程序路径添加到环境变量中时,总是磕磕绊绊忘一些,搞得总是从之前的程序里直接copy # 程序目录添加到系统环境变量 import os import sys im ...