20172305 2017-2018-2 《程序设计与数据结构》实验五报告
课程:《程序设计与数据结构》
班级: 1723
姓名: 谭鑫
学号:20172305
实验教师:王志强
实验日期:2018年6月13日
必修/选修: 必修html
1.实验内容
- 实验五 网络编程与安全-2:结对编程:一人负责客户端,一人负责服务器
- 注意责任归宿,要会经过测试证实本身没有问题
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,而后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式经过网络发送给服务器
- 服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
- 上传测试结果截图和码云连接
- 实验五 网络编程与安全-3:加密结对编程:1人负责客户端,一人负责服务器
- 注意责任归宿,要会经过测试证实本身没有问题
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,而后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后经过网络把密文发送给服务器
- 服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,能够用数组保存),而后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
- 上传测试结果截图和码云连接
- 实验五 网络编程与安全-4:密钥分发结对编程:1人负责客户端,一人负责服务器
- 注意责任归宿,要会经过测试证实本身没有问题
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,而后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密经过网络把密文发送给服务器
- 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
- 服务器接收到后缀表达式表达式后,进行解密,而后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
- 上传测试结果截图和码云连接
- 实验五 网络编程与安全-5:完整性校验结对编程:1人负责客户端,一人负责服务器
- 注意责任归宿,要会经过测试证实本身没有问题
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,而后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密经过网络把密文和明文的MD5値发送给服务器
- 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
- 服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
- 上传测试结果截图和码云连接
2. 实验过程及结果
3. 实验过程当中遇到的问题和解决过程
- 问题1:密钥的传输问题
问题1的解决方案:前两个实验没有加密,作起来仍是比较顺手的。实验三感受是一个分水岭。传输的过程须要带着密钥,可是将密钥经过QQ和微信传过去会有损失。想将密钥和密文以字符串的形式传输的话,在服务器上始终断不开,准备将密钥放到密文的字节数组里,再从服务端接收数组,从数组中扣除密钥的部分。编程
- 问题2:MD5的问题
问题2的解决方案:这个MD5在实验三的练习过程当中就每太懂,知识按照娄老师的博客中的要求进行练习,以前偷过的懒以后都得补回来...因此,找度娘查到MD5相似一种数字签名,利用传输信息造成MD5(一串消息摘要),经过网络传输过去,接收方经过解密接受过来的信息并生成对应的MD5,经过传过来的和接收方生成的进行对比,若是一直则没有被篡改,不一致就说明在传输过程当中被修改了。数组
- 问题3:Wrong Key Size
问题3的解决方案:密钥长度受限制,java运行时环境读到的是受限的policy文件。可是,我在按照网上的解决办法进行解决,在替换${jdk_home}/jre/lib/security目录下的 local_policy.jar 和 US_export_policy.jar 文件以后,却并没有卵用...侯大哥给我加了一个一句话SecretKeySpec k =new SecretKeySpec(sb,"DESede");
就能够解决。安全
- 问题4:DataOutputStream和DataInputStream
问题2的解决方案:这部分是在实验四遇到的问题。查到的代码能够实现实验四,可是不是很懂代码的含义。服务器
- writeUTF(String str)以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。
- DataOutputStream,数据输出流容许应用程序以适当方式将基本Java数据类型写入输出流中。而后,应用程序可使用数据输入流将数据读入。
- DataInputStream,数据输入流容许应用程序以与机器无关方式从底层输入流中读取基本Java数据类型。应用程序可使用数据输出流写入稍后由数据输入流读取的数据。
其余
实验五就是不断的在两台电脑之间传输信息,显示明文传输到后来的密文传输,一个密钥到两个密钥的加密,还有MD5的传输。在练习的过程当中遇到了不少关于密码的问题,也学习不少关于IO流的问题。
参考资料