zoukankan      html  css  js  c++  java
  • 20145206《Java程序设计》实验五Java网络编程及安全

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

    实验内容

    1.掌握Socket程序的编写;

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

    3.设计安全传输系统。

    实验步骤

    我和20145105姜丽结对编程,我设计客户端的部分。
    姜丽的博客园主页:http://www.cnblogs.com/schwarizard/
    <1>首先建立一个Socket对象,用来连接特定服务器的指定端口,输入的参数是ip地址和端口,注意ip地址是服务器的ip地址,即运行服务器的那台主机的ip地址。
    怎么查看主机的ip地址呢?在命令行中输入ipconfig即可。在我的计算机上执行如下:

    <2>然后用BufferedReader对象获得从服务器传来的网络输入流,用PrintWriter对象获得从客户端向服务器输出数据的网络输出流,用BufferedReader对象创建键盘输入流,以便客户端从键盘上输入信息。以上根据TCP的客户端代码编写。

    <3>下一步是先用RSA算法加密DES的秘钥,加密采用服务器的公钥。将加密后的秘钥传送给服务器。

    <4>然后用DES算法加密明文,将密文传到服务器。

    <5>然后计算明文的Hash函数值,传送给服务器。

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

    <6>最后从网络输入流读取结果,把从服务端返回的结果输出出来。

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

    我的客户端显示结果为:

    产生的问题及解决办法:

    问题1:出现系统找不到指定文件的问题
    解决办法:将Skey_RSA_pub.dat、Skey_RSA_priv.dat拷贝至与src同级的文件夹内

    问题2:把Skey_RSA_priv.dat、Skey_RSA_pub.dat拷贝至与src同级的文件夹内之后,发现还是会出现如图所示的问题:

    解决办法:在程序调用这个文件前加上指定路径:

    C:\Users\Administrator\IdeaProjects\untitled8\src\Skey_RSA_pub.dat
    

    这样问题就解决了!

    问题3:会出现连接超时的情况。
    解决办法:我们之前连的是服务器的手机热点,后来改用360wi-fi,并且IP地址输入正确,问题就解决啦!

    客户端实验代码如下:

    package Client;
    // file name��ComputeTCPClient.java
    import java.net.*;
    import java.io.*;
    public class ComputeTCPClient {
        public static void main(String srgs[]) {
            try {
                Socket socket = new Socket("172.20.10.5", 4000);
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
                BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
                System.out.print("请输入待发送的数据:");
                String str=stdin.readLine();
                Enc_RSA encode = new Enc_RSA(str);
                String s=encode.encodedata;
    
                out.println(s);
                str=in.readLine();
                System.out.println( "从服务器接收到的结果为:"+str);
            }
            catch (Exception e) {
                System.out.println(e);
            }
            finally{
                //stdin.close();
                //in.close();
                //out.close();
                //socket.close();
            }
        }
    }
    
    package Client;
    import java.io.*;
    import java.math.BigInteger;
    import java.security.interfaces.RSAPublicKey;
    
    public class Enc_RSA {
        public String encodedata="";
        public Enc_RSA(String s) throws Exception{
            FileInputStream f=new FileInputStream("C:\Users\Administrator\IdeaProjects\untitled8\src\Skey_RSA_pub.dat");
            ObjectInputStream b=new ObjectInputStream(f);
            RSAPublicKey  pbk=(RSAPublicKey)b.readObject( );
            BigInteger e=pbk.getPublicExponent();
            BigInteger n=pbk.getModulus();
            byte ptext[]=s.getBytes("UTF8");
            BigInteger m=new BigInteger(ptext);
            BigInteger c=m.modPow(e,n);
            String cs=c.toString( );
            encodedata=cs;
        }
    }
    

    实验心得体会

    本次实验主要练习如何把不同的代码放入到一个程序中实现功能,代码部分老师已经给出,关键在于拼凑代码以及对于代码的理解,通过这一周对于“网络编程安全”这篇博客的学习以及同学之间的讨论,大概了解了代码内容,希望可以通过实践掌握、运用。

    PSP时间

    步骤 耗时 百分比
    需求分析 20min 16.7%
    设计 40min 33.3%
    代码实现 20min 16.7%
    测试 20min 16.7%
    分析总结 20min 16.7%
  • 相关阅读:
    php与js 编码解码交互
    计算每页个数算法
    线程合并
    Sql调试
    并发问题
    context.Request方法总结
    元字符
    PHP留言小练习
    Git Shell Warning
    loading bar
  • 原文地址:https://www.cnblogs.com/ZouJR/p/5470696.html
Copyright © 2011-2022 走看看