博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20145328 《Java程序设计》实验五实验报告
阅读量:5766 次
发布时间:2019-06-18

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

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

实验名称

Java网络编程

实验内容

  1. 用书上的TCP代码,实现服务器与客户端。
  2. 客户端与服务器连接
  3. 客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务器的公钥加密,计算明文的Hash函数值,一起传送给客户端
  4. 客户端用RSA公钥密码中服务器的私钥解密DES的,秘钥,用秘钥对密文进行解密,得出明文。计算求得明文的Hash函数值,检查是否与传送过来的一致,如果一直,则表示匹配成功。

实验步骤

首先建立一个端口号启动服务器并与客户端相连,获得网络输入流与输出流对象的引用

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

然后计算解密后的hash值来确定解密是否正确

以上用到的加密算法、秘钥、Hash函数计算过程均利用的老师提供的代码。

在抛出异常部分,因为继承的是Exception类,所以直接输出抛出的异常。

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

885560-20160509005049921-114685428.png

服务器代码

package experiment_5;/** * Created by Administrator on 2016/5/6. */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(10001);//创建服务器套接字            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

心得体会

本次实验中主要涉及到的是关于java网络编程的内容,在阅读过那篇关于java网络编程的学习资料后对于代码的意思是可以理解的,而且大部分代码都是老师既定给好的,而我们的主要任务是对要实现的传输、加解密、连接等进行处理衔接。这次实验主要分为三个部分,一是多线程客户端和服务器的连接,而是RSA公钥加密,三是DES加密。主要的代码是从学长学姐那里拷来的,所以更多的是对代码进行理解。安全性检测也没去完善。

实验代码托管

在这里

PSP(Personal Software Process)时间:

步骤 耗时 百分比
需求分析 20min 12.5%
设计 40min 25%
代码实现 40min 25%
测试 30min 18.75%
分析总结 30min 18.75%

转载于:https://www.cnblogs.com/rebrust/p/5471289.html

你可能感兴趣的文章
虚拟货币测评之四——比特币现金(一)
查看>>
收发数据的原理(下)
查看>>
(四)ThinkPHP实践之分页讲解-TTLSA
查看>>
Android 工程目录的结构
查看>>
Windows Live Writer改保存目录
查看>>
IntelliJ IDEA 12详细开发教程(一)思想的转变与新手入门
查看>>
tomcat连接mysql超时
查看>>
通过devstack自动部署Openstack icehouse 版本
查看>>
5.10 recombinant shaders--game programming gems 笔记
查看>>
我的友情链接
查看>>
my vimrc
查看>>
一张图告诉你angular2所有知识点
查看>>
整数比较运算符
查看>>
从零开始学Python-day7
查看>>
在Ubuntu中通过update-alternatives切换软件版本
查看>>
java并发编程,volatile内存实现和原理
查看>>
Java多线程之内存可见性
查看>>
Linux test、[]、[[]]总结及性能比较
查看>>
木偶然-2015.12.1
查看>>
我的友情链接
查看>>