两人一组结对编程:
MyBC.javaMyDC.java我们在做之前的结对项目时曾经学习并运用过堆栈的相关知识,通过Java的Stack类中的方法实现出栈和入栈,调用MyBC类将中缀式转化为后缀式并以字符串形式返回。中缀转后缀方式如下:
之后调用MyDC对转化好的后缀式进行求值:
程序运行结果:

MyBC测试类检测结果:

MyDC测试类检测结果:

结对编程:1人负责客户端,一人负责服务器
套接字是一个网络连接的端点。在java中,使用java.net.Socket对象来表示一个套接字。要创建一个套接字,可以使用Socket的构造方法。
一旦成功创建了Socket类的一个实例,就可以使用它发送或接收字节流。
ServerSocket是服务器套接字的一个实现。ServerSocket和Socket不同,服务器套接字的角色是等待来自客户端的连接请求。一旦服务器套接字获得了一个连接请求,它就会创建一个Socket实例,以处理和客户端的通信。
客户端
客户端提醒用户输入一个中缀式,之后将中缀式传给服务端,最后将服务端传回的结果反馈给用户。
服务器
服务端调用MyDC,MyDC调用MyBC,将中缀式转化为后缀式,之后MyDC对后缀式进行其进行求值,之后将求出的值传给客户端




加密结对编程:1人负责客户端,一人负责服务器
KeyGeneratorkg=KeyGenerator.getInstance("DESede");获取密钥生成器,之后初始化密钥生成器并生成密钥。通过对象序列化方式将密钥保存在文件中2、解密时需要使用字节数组形式的密钥,因此需要将密钥以另一种方式保存在文件中。首先获取密钥并创建文件输入流,然后将其作为参数传递给对象输入流,最后执行对象输入流的readObject( )方法读取密钥对象。之后需要强制转换成Key类型,使返回的编码放在byte类型的数组中并保存密钥编码格式,创建文件输出流对象,在其参数中指定文件名,如keykb1.dat。然后执行文件输出流的write( )方法将得到的字节数组中的内容写入文件。
3、加密过程从文件中获取密钥,之后创建密码器并初始化密码器,接下来获取等待加密的明文,执行加密byte ctext[]=cp.doFinal(ptext);
处理加密结果,执行文件输出流将密文输出。
4、解密过程首先获取密文,之后获取密钥,创建并初始密码器后执行解密即可
服务器:

客户端:

密钥分发结对编程:1人负责客户端,一人负责服务器
使用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");创建密钥
服务器:

客户端:

完整性校验结对编程:1人负责客户端,一人负责服务器
生成MessageDigest对象
传入需要计算的字符串
计算消息摘要,使用DigestPass.MD5(String s)生成MD5值,服务器通过解密得到的明文利用MD5算法计算其摘要值,java.security包中提供了计算消息摘要的方法
处理计算结果
服务器:

客户端:

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

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


| 步骤 | 耗时(min) | 百分比 |
|---|---|---|
| 需求分析 | 90 | 19.0% |
| 设计 | 60 | 10.2% |
| 代码实现 | 144 | 30.4% |
| 测试 | 80 | 16.9% |
| 分析总结 | 100 | 21.1% |
2018-2019-2 20175317 实验五《网络编程与安全》实验报告
原文:https://www.cnblogs.com/xicyannn/p/10960273.html