• 实验五 网络编程与安全


    Java面向对象程序设计

    实验内容

    • 完成MyBC.java,实现输入中缀表达式,转为后缀表达式并计算结果
    • 参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十二章, 基于Java Socket实现客户端/服务器功能,客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器,服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端,客户端显示服务器发送过来的结果
    • 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后通过网络把密文发送给服务器,服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端,客户端显示服务器发送过来的结果
    • 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文发送给服务器,客户端和服务器用DH算法进行3DES或AES算法的密钥交换,服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端,客户端显示服务器发送过来的结果
    • 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文和明文的MD5値发送给服务器,客户端和服务器用DH算法进行3DES或AES算法的密钥交换,服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端,客户端显示服务器发送过来的结果

    实验要求

    1. 没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程;

    2. 完成实验、撰写实验报告,实验报告模板见QQ群,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等);

    3. 使用git进行代码提交,使用commit进行代码说明

    4. 禁止抄袭

    实验知识点

    1.掌握客户端和服务器的相关知识,我的IP地址为192.168.199.181,齐力锋的IP地址为192.168.56.1

    2.能够基于Java Socket实现客户端/服务器功能,传输方式用TCP

    3 能够把用3DES或AES算法加密通过网络把密文和明文的MD5値发送给服务器,并解密

    实验步骤

    1.实现中缀转后缀MyBC.java,并调用MyDC.java输出结果。

    2.创建服务器,通过克隆网上的服务器代码,然后伙伴克隆客户端代码,修改代码,调用中缀转后缀,并输出值。由客户端输入中缀,服务器得到后缀,并给客户端输出结果。调用代码如下:

       String line2 = in.readLine();
                System.out.println(line2);
                MyDC dc = new MyDC();
                int result = dc.evaluate (line2);
                System.out.println(result);
    
                //在标准输出上打印从客户端读入的字符串
                line=String.valueOf(result);
    

    3.接收服务器对于后缀表达式的信息,通过3DES共同协商的密钥解密出答案,并发送答案到服务器。

      Dncode dncode = new Dncode();
                String line2 = in.readLine();
                System.out.println(line2);
                String encodeRules = "lxrqlf";
                String content = line2;
                System.out.println("根据输入的规则"+encodeRules+"解密后的明文是:"+dncode.AESDncode(encodeRules, content));
                MyDC dc = new MyDC();
                int result = dc.evaluate (new String(dncode.AESDncode(encodeRules, content)));
                System.out.println(result);
    
                //在标准输出上打印从客户端读入的字符串
                line=String.valueOf(result);
    


    4.先生成两个人的公钥和私钥,最后通过KeyAgree.java算法得到共同的密钥,将密钥加入客户端和服务器,并运行。


    5.客户端通过DigestPass将后缀表达式生成MD5值,服务器接收,并判断与自己的MD5值是否相等,若不相等则终止程序,关键代码如下:

       Dncode dncode = new Dncode();
                String line2 = in.readLine();
                String line3 = in.readLine();
                System.out.println("得到的MD5值为"+line3);
                System.out.println("得到的密文为"+line2);
                String encodeRules = "67,-78,48,-68,-9,63,41,-42,70,-109,24,74,97,-8,71,92,123,46,-80,-123,-100,-29,-120,49,-39,55,-100,-31,62,-46,39,42,-10,-126,-88,-59,-86,-22,67,-95,-81,-122,-107,114,-31,113,-17,110,26,122,-29,57,-27,-70,-67,40,-108,14,-17,8,1,-71,-93,-1,-22,-87,52,12,-29,61,-117,126,73,-69,-62,-48,-38,-128,7,77,95,-88,-22,88,-5,-55,-99,39,107,-128,67,-120,49,-127,-82,-12,-117,13,73,105,-45,118,122,1,-124,123,-18,65,47,-40,105,-30,111,51,13,-83,22,-89,114,-62,-55,98,-15,-8,40,36,37,-88,
    ";
                String content = line2;
                System.out.println("根据DH生成的密钥"+encodeRules+"解密后的明文是:"+dncode.AESDncode(encodeRules, content));
                String x=dncode.AESDncode(encodeRules, content);
                MessageDigest m=MessageDigest.getInstance("MD5");
                m.update(x.getBytes("UTF8"));
                byte s[ ]=m.digest( );
                String result1="";
                for (int i=0; i<s.length; i++){
                    result1+=Integer.toHexString((0x000000ff & s[i]) |
                            0xffffff00).substring(6);
                }
               if (!result1.equals(line3)) {
                   System.out.println("密文被篡改");
                   System.exit(0);
               }
                MyDC dc = new MyDC();
                int result = dc.evaluate (new String(dncode.AESDncode(encodeRules, content)));
                System.out.println(result);
    

    实验感想

    这周实验虽然做的并不顺利,但是我是真的把每一个环节给弄懂了,学到了知识。

  • 相关阅读:
    vuex详解
    es6 数组方法的扩展
    es6class语法和继承
    变量的解构赋值
    es6变量let
    前端模块化
    webpack基础
    react中的redux(入门)
    react-router-dom中的BrowserRouter和HashRouter和link与Navlink
    react-router-dom
  • 原文地址:https://www.cnblogs.com/lxrlxr/p/6957680.html
Copyright © 2020-2023  润新知