20172313 2017-2018-2 《程序设计与数据结构》实验五报告
课程:《程序设计与数据结构》
班级: 1723
姓名: 李楠
学号:20172313
实验教师:王志强
实验日期:2018年6月13日
必修/选修: 必修
1.实验目的
实验目的
1.了解计算机网络基础
2.掌握Java Socket编程
3.理解混合密码系统
4.掌握Java 密码技术相关API的使用
2. 实验过程及结果
实验1:
1.参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA
2.结对实现中缀表达式转后缀表达式的功能 MyBC.java
3.结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java
4.上传测试代码运行结果截图和码云链接
- 原理
表达式Exp = S1 + OP + S2(S1,S2是两个操作数,OP为运算符)有三种标识方法:
OP + S1 + S2 为前缀表示法
S1 + OP + S2 为中缀表示法
S1 + S2 + OP 为后缀表示法
dc运算符:
+: 依次弹出w1与w2,将w2+w1压栈。精度为结果值精度
-: 依次弹出w1与w2,将w2-w1压栈
依次弹出w1与w2,将w2w1压栈。精度为结果值精度与precision中较大值
/ : 依次弹出w1与w2,将w2/w1压栈。精度为precision
% : 依次弹出w1与w2,将w2-w2/w1*w1压栈
实现后缀表达式伪代码:
设置一个操作数栈,开始栈为空;
从左到右扫描后缀表达式,遇操作数,进栈;
若遇运算符,则从栈中退出两个元素,先退出的放到运算符的右边,后退出的放到运算符左边,运算后的结果再进栈,直到后缀表达式扫描完毕。
由中缀式求得后缀式伪代码:
设立一个栈,存放运算符,首先栈为空;
从左到右扫描中缀式,若遇到操作数,直接输出,并输出一个空格作为两个操作数的分隔符;
若遇到运算符,则与栈顶比较,比栈顶级别高则进栈,否则退出栈顶元素并输出,然后输出一个空格作分隔符;
若遇到左括号,进栈;若遇到右括号,则一直退栈输出,直到退到左括号止。
当栈变成空时,输出的结果即为后缀表达式。
-
截图:
-
代码链接
(https://gitee.com/CS-IMIS-23/ln20172330/tree/master/idea/实验5/1)
实验2:
结对编程:1人负责客户端,一人负责服务器
1.注意责任归宿,要会通过测试证明自己没有问题
2.基于Java Socket实现客户端/服务器功能,传输方式用TCP
3.客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器
4.服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
5.客户端显示服务器发送过来的结果
6.上传测试结果截图和码云链接 -
截图
-
代码链接
(https://gitee.com/CS-IMIS-23/ln20172330/tree/master/idea/实验5/2)
实验3:
1.加密结对编程:1人负责客户端,一人负责服务器
2.注意责任归宿,要会通过测试证明自己没有问题
3.基于Java Socket实现客户端/服务器功能,传输方式用TCP
4.客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后通过网络把密文发送给服务器
5.服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
客户端显示服务器发送过来的结果
6.上传测试结果截图和码云链接
- 截图:
实验4:
密钥分发结对编程:1人负责客户端,一人负责服务器
1.基于Java Socket实现客户端/服务器功能,传输方式用TCP
2.客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文发送给服务器
3.客户端和服务器用DH算法进行3DES或AES算法的密钥交换
4.服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
5.客户端显示服务器发送过来的结果
6.上传测试结果截图和码云链接
-
截图
-
代码截图
(https://gitee.com/CS-IMIS-23/ln20172330/tree/master/idea/实验5/4)
实验5:
完整性校验结对编程:1人负责客户端,一人负责服务器
1.注意责任归宿,要会通过测试证明自己没有问题
2.基于Java Socket实现客户端/服务器功能,传输方式用TCP
3.客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文和明文的MD5値发送给服务器
4.客户端和服务器用DH算法进行3DES或AES算法的密钥交换
5.服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
6.客户端显示服务器发送过来的结果
7.上传测试结果截图和码云链接 -
截图:
4.其他
java结课了,我们回家吧。
5.参考资料
《Java 密码学算法》