• 2018-2019-2 20175317 实验五《网络编程与安全》实验报告


    2018-2019-2 20175317 实验五《网络编程与安全》实验报告

    一、实验步骤及内容

    网络编程与安全-1

    两人一组结对编程:
    0. 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA

    1. 结对实现中缀表达式转后缀表达式的功能 MyBC.java
    2. 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java
    3. 上传测试代码运行结果截图和码云链接

    实验步骤:

    我们在做之前的结对项目时曾经学习并运用过堆栈的相关知识,通过Java的Stack类中的方法实现出栈和入栈,调用MyBC类将中缀式转化为后缀式并以字符串形式返回。中缀转后缀方式如下:

    • 如果遇到操作数就直接输出。
    • 如果遇到操作符则将其放入栈中,遇到左括号也将其放入栈中。
    • 如果遇到右括号,则将栈元素弹出,将弹出的操作符输出直到遇到遇到左括号为止,但是左括号只弹出不输出。
    • 如果遇到任何其他操作符,如“+”,“-”,“*”,“÷”,“(”等,从栈中弹出元素直到遇到更低优先级的元素或栈空为止。弹出完这些元素才将遇到的操作符压入栈中。
    • 如果读到了输入的末尾,则将栈中所有元素依次弹出。

    之后调用MyDC对转化好的后缀式进行求值:

    1. 从左到右遍历表达式的每个数字和符号
    2. 遇到是数字就进栈;遇到是符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈
    3. 运行到最终得到结果

    实验截图:

    程序运行结果:

    输入图片说明

    MyBC测试类检测结果:

    输入图片说明

    MyDC测试类检测结果:

    输入图片说明

    网络编程与安全-2

    结对编程:1人负责客户端,一人负责服务器
    0. 注意责任归宿,要会通过测试证明自己没有问题

    1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
    2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器
    3. 服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
    4. 客户端显示服务器发送过来的结果
    5. 上传测试结果截图和码云链接

    实验步骤:

    套接字是一个网络连接的端点。在java中,使用java.net.Socket对象来表示一个套接字。要创建一个套接字,可以使用Socket的构造方法。
    一旦成功创建了Socket类的一个实例,就可以使用它发送或接收字节流。
    ServerSocket是服务器套接字的一个实现。ServerSocketSocket不同,服务器套接字的角色是等待来自客户端的连接请求。一旦服务器套接字获得了一个连接请求,它就会创建一个Socket实例,以处理和客户端的通信。

    • 客户端
      客户端提醒用户输入一个中缀式,之后将中缀式传给服务端,最后将服务端传回的结果反馈给用户。

    • 服务器

    服务端调用MyDCMyDC调用MyBC,将中缀式转化为后缀式,之后MyDC对后缀式进行其进行求值,之后将求出的值传给客户端

    实验截图:

    1. 正常情况
    • 客户端:

    输入图片说明

    • 服务器:

    输入图片说明

    1. 异常情况
    • 客户端:

    输入图片说明

    • 服务器:

    输入图片说明

    网络编程与安全-3

    加密结对编程:1人负责客户端,一人负责服务器
    0. 注意责任归宿,要会通过测试证明自己没有问题

    1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
    2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后通过网络把密文发送给服务器
    3. 服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
    4. 客户端显示服务器发送过来的结果
    5. 上传测试结果截图和码云链接

    实验步骤:

    1. 加解密步骤首先需要生成密钥,使用KeyGeneratorkg=KeyGenerator.getInstance("DESede");获取密钥生成器,之后初始化密钥生成器并生成密钥。通过对象序列化方式将密钥保存在文件中

    2、解密时需要使用字节数组形式的密钥,因此需要将密钥以另一种方式保存在文件中。首先获取密钥并创建文件输入流,然后将其作为参数传递给对象输入流,最后执行对象输入流的readObject( )方法读取密钥对象。之后需要强制转换成Key类型,使返回的编码放在byte类型的数组中并保存密钥编码格式,创建文件输出流对象,在其参数中指定文件名,如keykb1.dat。然后执行文件输出流的write( )方法将得到的字节数组中的内容写入文件。

    3、加密过程从文件中获取密钥,之后创建密码器并初始化密码器,接下来获取等待加密的明文,执行加密byte ctext[]=cp.doFinal(ptext);
    处理加密结果,执行文件输出流将密文输出。

    4、解密过程首先获取密文,之后获取密钥,创建并初始密码器后执行解密即可

    实验截图:

    服务器:

    输入图片说明

    客户端:

    输入图片说明

    网络编程与安全-4

    密钥分发结对编程:1人负责客户端,一人负责服务器
    0. 注意责任归宿,要会通过测试证明自己没有问题

    1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
    2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文发送给服务器
    3. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
    4. 服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
    5. 客户端显示服务器发送过来的结果
    6. 上传测试结果截图和码云链接

    实验步骤:

    使用DH算法进行密钥3DES或AES的密钥交换具体步骤:
    使用KeyPairGenerator kpg=KeyPairGenerator.getInstance("DH");创建密钥对生成器;
    使用kpg.initialize(1024);初始化密钥生成器;
    使用KeyPair kp=kpg.genKeyPair( );生成密钥对;
    使用PublicKey pbkey=kp.getPublic( );PrivateKey prkey=kp.getPrivate( );获取公钥和私钥;
    使用KeyAgreement ka=KeyAgreement.getInstance("DH");创建密钥协定对象;
    使用SecretKeySpec k=new SecretKeySpec(sb,"AES");创建密钥

    实验截图:

    服务器:

    输入图片说明

    客户端:

    输入图片说明

    网络编程与安全-5

    完整性校验结对编程:1人负责客户端,一人负责服务器
    0. 注意责任归宿,要会通过测试证明自己没有问题

    1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
    2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文和明文的MD5値发送给服务器
    3. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
    4. 服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
    5. 客户端显示服务器发送过来的结果
    6. 上传测试结果截图和码云链接

    实验步骤:

    1. 生成MessageDigest对象

    2. 传入需要计算的字符串

    3. 计算消息摘要,使用DigestPass.MD5(String s)生成MD5值,服务器通过解密得到的明文利用MD5算法计算其摘要值,java.security包中提供了计算消息摘要的方法

    4. 处理计算结果

    实验截图:

    服务器:

    输入图片说明

    客户端:

    输入图片说明

    二、实验过程中遇到的问题及其解决

    • 问题1:

    实验三刚开始在同伴的电脑上运行不出结果并一直报错

    输入图片说明

    • 问题1解决方案:

    经过许多尝试后我们还是没能解决,但是将代码拷贝到我的电脑中之后运行,结果正常

    输入图片说明

    输入图片说明

    三、码云链接

    四、参考代码

    数据结构应用

    Java 密码学算法

    五、PSP时间

    步骤 耗时(min) 百分比
    需求分析 45 19.0%
    设计 30 10.2%
    代码实现 72 30.4%
    测试 40 16.9%
    分析总结 50 21.1%
  • 相关阅读:
    SpringBoot整合RabbitMQ
    RabbitMQ消息确认机制
    RabbitMQ六种队列模式-简单队列模式
    RabbitMQ六种队列模式-工作队列模式
    RabbitMQ六种队列模式-发布订阅模式
    RabbitMQ六种队列模式-路由模式
    RabbitMQ六种队列模式-主题模式
    RabbitMQ简单介绍+Windows环境安装
    SpringBoot整合ActiveMQ发送邮件
    下载缓慢文件记录,持续更新[2019-10-29]
  • 原文地址:https://www.cnblogs.com/20175317zrw/p/10946234.html
Copyright © 2020-2023  润新知