实验3报告

Posted lyz182329

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验3报告相关的知识,希望对你有一定的参考价值。

学号 20182329 2019-2020-1 《数据结构与面向对象程序设计》实验3报告

  • 课程:《程序设计与数据结构》
  • 班级: 1823
  • 姓名: 李一卓
  • 学号:20182329
  • 实验教师:王志强
  • 实验日期:2019年9月30日
  • 必修/选修: 必修

1.实验内容

  • 首先学习Java Socket的编程,后面实验45都要用到,来传递数据。
  • 学习凯撒密码的使用方法
  • 学习Java密码的DES算法和RSA算法还有HD算法
  • 编写简单计算器(有理数计算器)。
  • 使用试验1里面的方法和实验三代码,编写客户端,客户端通过键盘输入一个有理数计算的公式(例如:1/4 + 1/6 = ),并把该公式以字符串的形式发送给伙伴B(服务器端),服务器端根据字符串计算出结果为5/12,并把结果返回给客户端A,A收到结果后输出结果。

2. 实验过程及结果

  • 先进行Java Socket的编程,copy老师的代码,可以自己改变服务端和客户端的输出字符,最重要的是吧IP地址改到结对伙伴的地址上,连接同一个网络。运行如下:技术图片

  • 学习凯撒密码的编译,凯撒密码的密钥是3,算法是将普通字母表中的字母用密钥对应的字母替换。凯撒密码的加密过程可记为如下一个变换:c≡m+k mod n(其中n为基本字符个数),如图:技术图片

  • 再然后学习DES算法,首先要生成密钥,分为几部: 获取密钥生成器, 初始化密钥生成器,生成密钥,通过对象序列化方式将密钥保存在文件中。如图:技术图片

  • 生成密钥后,生成Java中所有的密钥类都有一个getEncoded( )方法,通过它可以从密钥对象中获取主要编码格式,其返回值是字节数组。如图:技术图片

  • 设置完方法后,首先要从文件中获取已经生成的密钥,然后考虑如何使用密钥进行加密。这涉及到各种算法。Java中已经提供了常用的加密算法,我们执行Java中Cipher类的各个方法就可以完成加密过程。如图:技术图片

然后就是使用密钥加密了,如图:技术图片

  • 然后我们要学习RSA算法的加密方法,和DES类似,要生成公钥,和私钥,在执行加密和解密。如图:技术图片
    技术图片

技术图片

  • 学习使用密钥协定创建共享密钥,首先创建DH公钥和私钥,在创建共享密钥,如图:技术图片

  • 学习使用Java计算指定字符串的消息摘要。如图:技术图片

  • 自己编写有理数计算器。
  • 结对伙伴编程实现客户端,我实现服务器端。
    客户端通过键盘输入一个有理数计算的公式(例如:1/4 + 1/6 = ),并把该公式以字符串的形式发送给服务器端,服务器端根据字符串计算出结果为5/12,并把结果返回给客户端,收到结果后输出结果。
  • 和复数计算器一样
    客户端通过键盘输入一个复数计算的公式,并把该公式以字符串的形式发送给伙伴服务器,服务器端根据字符串计算出结果,并把结果返回给客户端,收到结果后输出结果。
    技术图片

3. 实验过程中遇到的问题和解决过程

  • 问题1:在使用使用密钥协定创建共享密钥时,发现创建的公钥私钥无法使用,运行如下图:技术图片

  • 问题1解决方法:建立两个目录A和B,模拟需要秘密通信的A、B双方,由于DH算法需要A和B各自生成DH公钥和私钥,因此在这两个目录下都拷贝编译后文件Key_DH。而我则是直接在同一个目录下运行两个程序。所以首先由A创建自己的公钥和私钥,然后由B创建自己的公钥和私钥,最后发布公钥,A将Apub.dat拷贝到B目录,B将Bpub.dat拷贝到A的目录。
  • 问题2:在编写凯撒密码的4函数时,发现运行不了,我将明文和加密方法直接输入时不能加载,如图:技术图片

  • 问题2解决方法:密钥的解密加密是在Exit的方法栏里找到Progiamarguments里面进行输入的。

其他(感悟、思考等)

在学习中,理解了客户端和服务端的之间的联系,在学习使用java密钥的方法时,必须将密钥和文件的编写分为两个方面,密钥的编写完成后的功能,决定了后面明文的健米方式,而且不同的算法会有你不同的加密解密方式,网络数据传递的是我们将来java实用化的第一步。

参考资料

以上是关于实验3报告的主要内容,如果未能解决你的问题,请参考以下文章

实验报告四

实验3报告

20182316胡泊 实验3报告

第四次实验报告

实验报告4

第三次实验报告