20145104张家明实验五
北京电子科技学院(BESTI)
实 验 报 告
课程:Java程序与设计 班级:1451
姓名:张家明 冯文华
学号:2015104 20145103
成绩: 指导教师:娄嘉鹏 实验日期:
实验密级: 预习程度: 实验时间:15:30-18:00
仪器组次: 必修/选修:选修 实验序号:5
实验名称:Java网络编程及安全
实验目的与要求:结对编程,实现客户端和服务器之间数据的发送与接收,实现加解密和验证Hash函数值。
【实验内容】
1.用书上的TCP代码,实现服务器与客户端。
2.客户端与服务器连接
3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务器的公钥加密,计算明文的Hash函数值,一起传送给客户端
4.客户端用RSA公钥密码中服务器的私钥解密DES的,秘钥,用秘钥对密文进行解密,得出明文。计算求得明文的Hash函数值,检查是否与传送过来的一致,如果一直,则表示匹配成功。
【实验步骤】
我和20145103冯文华结对编程,我设计服务器的部分。
冯文华的博客园主页: http://www.cnblogs.com/20145103fwh/
首先建立一个端口号启动服务器并与客户端相连,获得网络输入流与输出流对象的引用
接着使用服务器端RSA的私钥对DES的密钥进行解密,对秘钥进行解密之后使用DES对密文进行解密
然后计算解密后的hash值来确定解密是否正确
以上用到的加密算法、秘钥、Hash函数计算过程均利用的老师提供的代码。
在抛出异常部分,因为继承的是Exception类,所以直接输出抛出的异常。
代码写好后,先运行服务器,再运行客户端,显示“服务器已经启动后”启动客户端,,连接成功会显示“已经建立连接”,然后就可以从客户端输入数据发送到服务器了。
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<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;
}
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();
} }
转载于:https://www.cnblogs.com/wodedadao/p/5472371.html
20145104张家明实验五相关推荐
- 2018-2019-2 20175204 张湲祯 实验五《网络编程与安全》实验报告
2018-2019-2 20175204 张湲祯 实验五<网络编程与安全>实验报告 实验五<网络编程与安全> 一.实验内容: 1.网络编程与安全-1 任务详情 两人一组结对编程 ...
- 20175208 张家华 实验四《Android开发基础》实验报告
一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:张家华 学号:20175208 指导教师:娄嘉鹏 实验日期:2019年5月16日 实验时 ...
- 20145308刘昊阳 20145302张薇《信息安全系统设计基础》实验五:网络通信 实验报告...
20145308刘昊阳 20145302张薇 <信息安全系统设计基础>实验五:网络通信 实验报告 本次实验报告由结队伙伴书写:http://www.cnblogs.com/5302v/p/ ...
- 2018-2019-2 20175227张雪莹《Java程序设计》实验五 《网络编程与安全》
2018-2019-2 20175227张雪莹<Java程序设计> 实验五 <网络编程与安全> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学号:20 ...
- 2019-2020-1 20175227张雪莹《信息安全系统设计基础》 实验五 《通讯协议设计》
2019-2020-1 20175227张雪莹<信息安全系统设计基础> 实验五 <通讯协议设计> 实验报告封面 课程:信息安全系统设计基础 班级:1752班 姓名:张雪莹 学号 ...
- 《数据库系统原理及应用教程》(苗雪兰等,第五版) 实验五:数据库的组合查询和统计查询实验
阅读前注意: 1. 本实验报告配套<数据库系统原理及应用教程>(苗雪兰等,第五版) 实验五:数据库的组合查询和统计查询实验(书上10.4节以及第六章部分内容),书本中采用Microsoft ...
- 百度地图根据轨迹计算路程_百度张传明:疫情下的“活”导航是如何炼成的
不到现场,照样看最干货的学术报告! 嗨,大家好.这里是学术报告专栏,读芯术小编不定期挑选并亲自跑会,为大家奉献科技领域最优秀的学术报告,为同学们记录报告干货,并想方设法搞到一手的PPT和现场视频--足 ...
- 中科院张家俊:ChatGPT中的提示与指令学习
内容来源:ChatGPT 及大模型专题研讨会 分享嘉宾:中国科学院自动化研究所研究员 张家俊 分享主题:<ChatGPT中的提示与指令学习> 中国科学院自动化研究所研究员张家俊以ChatG ...
- 360金融首席科学家张家兴:只靠AI Lab做不好AI中台 | 独家专访
「AI 技术生态论」 人物访谈栏目是 CSDN 发起的百万人学 AI 倡议下的重要组成部分.通过对 AI 生态顶级大咖.创业者.行业 KOL 的访谈,反映其对于行业的思考.未来趋势判断.技术实践,以及 ...
最新文章
- mysql源码学习 vc项目解决方案文件_Mysql源码学习——源码目录结构
- SQLite3单例模式(C++)
- php记录读取数据类型,数据读取 · ThinkPHP 3.2.3开发手册 · 看云
- synchronized【Java】中使用的demo
- Oracle ORA-00903:表名无效
- DetNAS:首个搜索物体检测Backbone的方法 | NeurIPS 2019
- hibernate课程 初探单表映射1-2 ORM定义
- 解决Linux Kettle出现闪退问题
- Try increasing heap size with java option '-Xmxlt;sizegt;’.
- 各大linux发行版安装宝塔桌面脚本
- BZOJ——T 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛
- java俄罗斯方块设计报告_俄罗斯方块JAVA课程设计实验报告毕业设计
- mysql数据库备份sql语句_mysql用户管理、常用sql语句及数据库的备份
- toastr 简单使用(弹出提示)
- 同步助手 android 微信 表情包,微信表情轻松导,同步助手带你装逼带你飞
- 网络流(4)——带有容量的顶点和二部匹配
- 《17.Deep Pyramidal Residual Networks》
- Flash制作卷轴水墨画展开动画效果
- uni-app 封装接口 405错误
- 图像风格迁移【老版】