20162326 齐力锋 实验五实验报告

北京电子科技学院(BESTI)

                                                                                                       实     验    报     告
                                                                                           课程: 程序设计与数据结构  班级: 1623  姓名: 齐力锋 学号: 20162326

                                                                                     成绩: 指导教师: 娄嘉鹏/王志强 实验日期: 2017年6月9日

                                                                                         实验密级:非密级 预习程度: 优良 实验时间: 2 Hours

                                                                                              仪器组次: 必修/选修: 必修 实验序号: 05

                                                                                                       实验名称:Java网络编程与安全

实验内容
1.完成MyBC.java,实现输入中缀表达式,转为后缀表达式并计算结果

2.《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十二章, 基于Java Socket实现客户端/服务器功能,客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器,
服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端,客户端显示服务器发送过来的结果

3.客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后通过网络把密文发送给服务器,服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端,客户端显示服务器发送过来的结果

4.客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文发送给服务器,客户端和服务器用DH算法进行3DES或AES算法的密钥交换,服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端,客户端显示服务器发送过来的结果

5.客户端让用户输入中缀表达式,然后把中缀表达式调用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値发送给服务器,并解密

实验步骤

一、 完成MyBC.java,实现输入中缀表达式,转为后缀表达式并计算结果

20162326 齐力锋 实验五实验报告_第1张图片

这个比较简单,直接调用以前四则运算写的代码就行

二、 参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十二章, 基于Java Socket实现客户端/服务器功能,客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器,服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端,客户端显示服务器发送过来的结果

代码如下:

   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);

20162326 齐力锋 实验五实验报告_第2张图片

在结对学习中,我负责客户端,我的搭档负责服务器
过程为,创建服务器,结对学习,修改代码,调用中缀转后缀,并输出值。由客户端输入中缀,服务器得到后缀,并给客户端输出结果。

三、 接收服务器对于后缀表达式的信息,通过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);

20162326 齐力锋 实验五实验报告_第3张图片

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

五、
20162326 齐力锋 实验五实验报告_第4张图片

代码如下:

   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,\n";
            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

这个实验的过程为,客户端通过DigestPass将后缀表达式生成MD5值然后服务器接收,并判断与自己的MD5值是否相等,若不相等则会终止程序

实验感想:

  • 这周的实验总体难度还可以,需要搭档之间多多交流,需要时间去学习和熟悉代码,有些代码我和搭档的确写不出来,但是我们参考他人的代码后,能够学习并转化为自己的东西,这是最好的

你可能感兴趣的:(20162326 齐力锋 实验五实验报告)