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网络编程及安全"的更多相关文章

  1. 20145213《Java程序设计》实验五Java网络编程及安全

    20145213<Java程序设计>实验五Java网络编程及安全 实验内容 1.掌握Socket程序的编写. 2.掌握密码技术的使用. 3.设计安全传输系统. 实验预期 1.客户端与服务器 ...

  2. 20145206《Java程序设计》实验五Java网络编程及安全

    20145206<Java程序设计>实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和201451 ...

  3. 20145337实验五Java网络编程及安全

    20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...

  4. JAVA课程实验报告 实验五 Java网络编程及安全

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  5. 20145225《Java程序设计》 实验五 Java网络编程及安全

    20145225<Java程序设计> 实验五 Java网络编程及安全 实验报告 一.实验内容 基于Java Socket实现安全传输. 基于TCP实现客户端和服务器,结对编程一人负责客户端 ...

  6. 20145208 实验五 Java网络编程

    20145208 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...

  7. 20145215实验五 Java网络编程及安全

    20145215实验五 Java网络编程及安全 实验内容 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验步骤 本次实验我的结对编程对象是20145208蔡野,我负责编写客 ...

  8. 20145220 实验五 Java网络编程

    20145220 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...

  9. 20145203 实验五 Java网络编程及安全

    20145203 实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验要求 1.基于Java Socket实现安全传输 2 ...

随机推荐

  1. hadoop错误各种原因

    NoRouteToHostException 错误描述: INFO hdfs.DFSClient: Exception in createBlockOutputStream java.net.NoRo ...

  2. min-height的兼容性问题

    1.经测试 IE+和其它主流浏览器均支持min-height属性,已经满足目前的需求. 2.当height和min-height同时设置时,浏览器自动选择数值更大的一个(测试IE7+及其他主流浏览器) ...

  3. 微信小程序 --- page.js文件

    page.js文件是写当前 page.wxml 页面的 JS 脚本文件: 示例: //获取应用实例 const app = getApp() Page({ data: { navComOneOnOff ...

  4. create sequence

    create sequence seq_test start with 3 increment by 1 minvalue 1  --范围-(1027 -1) maxvalue 99999999999 ...

  5. 【ES6】001---module模块------【巷子】

    001.前言 什么是模块化开发?   为了提高代码的复用度,开发人员会按照功能把大量的js代码分成若干文件,这样在多个页面就可以使用同一个文件了.,下面是某个网站的js引用情况 怎么会有这么多js文件 ...

  6. 对TControl和TWinControl相同与不同之处的深刻理解(每一个WinControl就相当于扮演了整个Windows的窗口管理角色,主要是窗口显示和窗口大小)——TWinControl就两个作用(管理子控件的功能和调用句柄API的功能)

    TControl是图形控件,它本身没有句柄,所以不能直接使用WINAPI显示,调整位置,发消息等等,只能想办法间接取得想要的效果,但是可以直接使用一些不需要句柄的API,比如InvalidateRec ...

  7. mysql_commit() COMMIT ROLLBACK 提交 回滚 连接释放

    MySQL :: MySQL 8.0 Reference Manual :: 28.7.7.6 mysql_commit() https://dev.mysql.com/doc/refman/8.0/ ...

  8. flask中Flask()和Blueprint() flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法

    1.Blueprint()在蓝本注册函数register_blueprint()中,第一个参数为所注册的蓝本名称.当我们在应用对象上注册一个蓝图时,需要指定一个url_prefix关键字 参数(这个参 ...

  9. Django - 模型层 - 上

    一.ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...

  10. Strongly connected---hdu4635(强联通分量)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4635 先判断图是否强连通.如果不是强连通的,那么缩点. 我们的目的是加最多的边,那么最后的图中,肯定两 ...