课程:《程序设计与数据结构》
班级: 1723
姓名: 王志伟
学号:20172309
实验教师:王志强老师
实验日期:2018年6月13日
必修/选修: 必修html
实验要求:java
1.伙伴1编写服务器端程序,接收客户端发送的数据(形式以下:12 15 8 100 25 34 19),将其排序后,发回给客户端。
2.伙伴2编写客户端程序,将一串字符串(形式以下:12 15 8 100 25 34 19)发送给服务器端,接收排序后的程序,并显示。
3.截图上传,附上码云地址。git
实验结果:
算法
实验要求:数组
- 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA
- 结对实现中缀表达式转后缀表达式的功能 MyBC.java
- 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java
- 上传测试代码运行结果截图和码云连接
实验要求:网络
- 注意责任归宿,要会经过测试证实本身没有问题
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,而后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式经过网络发送给服务器
- 服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
- 上传测试结果截图和码云连接
实验结果:
数据结构
实验要求:加密
- 注意责任归宿,要会经过测试证实本身没有问题
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,而后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后经过网络把密文发送给服务器
- 服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,能够用数组保存),而后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
- 上传测试结果截图和码云连接
实验要求:
- 注意责任归宿,要会经过测试证实本身没有问题
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,而后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密经过网络把密文发送给服务器
- 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
- 服务器接收到后缀表达式表达式后,进行解密,而后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
- 上传测试结果截图和码云连接
实验要求:
- 注意责任归宿,要会经过测试证实本身没有问题
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,而后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密经过网络把密文和明文的MD5値发送给服务器
- 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
- 服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
- 上传测试结果截图和码云连接
实验结果:
程序代码:https://gitee.com/CS-IMIS-23/20172309_javaProgramming/tree/master/Test/test4/wednesdaytest/test5
问题一:运行了之后一直没反应,(保证本身写的代码没问题!)
> //出现问题 > String info=null; > String temp=null; > while(!((temp = bufferedReader.readLine()) ==null)){//当使用while语句时,由于temp一直是空的,因此循环一直进行!(在前面应该对temp进行赋值,令temp = info) > info = temp; > System.out.println("我是服务器,学号【20172310】用户信息为:" + info); > }
解决方案:出现这个问题的方法多是使用的字符标准不一样:
客服端与服务器都得使用“UTF-8”标准。
>public static void main(String args[ ]) throws Exception{//此处只能使用命令行输入命令 > DHParameterSpec DHP= >new DHParameterSpec(skip1024Modulus,skip1024Base); > > KeyPairGenerator kpg= KeyPairGenerator.getInstance("DH"); > kpg.initialize(DHP); > KeyPair kp=kpg.genKeyPair(); > > PublicKey pbk=kp.getPublic(); > PrivateKey prk=kp.getPrivate(); > // 保存公钥 > FileOutputStream f1=new FileOutputStream(args[0]); > ObjectOutputStream b1=new ObjectOutputStream(f1); > b1.writeObject(pbk); > // 保存私钥 > FileOutputStream f2=new FileOutputStream(args[1]); > ObjectOutputStream b2=new ObjectOutputStream(f2); > b2.writeObject(prk); > }
而我想要的是在想使用这个程序,调用一个方法就行,所以,咱们能够这样改:
> public static void fun(String s1,String s2) throws Exception{//将 args[] 改为一个方法+参数 > DHParameterSpec DHP= new DHParameterSpec(skip1024Modulus,skip1024Base); > KeyPairGenerator kpg= KeyPairGenerator.getInstance("DH"); > kpg.initialize(DHP); > KeyPair kp=kpg.genKeyPair(); > PublicKey pbk=kp.getPublic(); > PrivateKey prk=kp.getPrivate(); > //保存公钥 > FileOutputStream f1=new FileOutputStream(s1); > ObjectOutputStream b1=new ObjectOutputStream(f1); > b1.writeObject(pbk); > //保存私钥 > FileOutputStream f2=new FileOutputStream(s2); > ObjectOutputStream b2=new ObjectOutputStream(f2); > b2.writeObject(prk); > }
这样咱们想要实现这个功能,只须要调用这个方法就好了。
实验五是在实验三的基础上作的,用到了实验三详细说明的密码学内容。在学实验三的时候,根本看不懂!!!多是本身没认真看所有是复制粘贴的。不过如今从新学了一下感受好多了,好像能看出个因此然出来了。实验五的目的是让咱们学会用加密形式进行传输,虽然在实验的过程当中出现了不少错误,但最后都解决了,并且在作实验的过程当中发现弄这个实验其实也挺有趣的。最后提交做业的时候发现本身是交的比较早的,由于我是站在巨人的肩膀上完成实验的(参考了网上的一些方法)!在此感谢他们~
1.java密码学算法
2.java IO流总结
3.IO流详解
4.DH算法原理