2018-2019-2 20175317実験ファイブ「ネットワークプログラミングおよびセキュリティ」テストレポート
まず、実験手順と範囲
ネットワークプログラミングとセキュリティ-1
ペアペアプログラミング:
- 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA
- ジャンクション機能実装中置表現転送後置式
MyBC.java
- 実装上式関数から得られた後置表現の機能を実現するための接合部、コール
MyDC.java
- テストコードとコードの実行結果のスクリーンショットクラウドリンクをアップロード
実験手順:
ペアがスタックを通じて知識を習得し、使用していたときに我々はプロジェクトを行う前に、Javaの通過Stack
スタックを実装したクラスのメソッドを積み重ね、呼び出しMyBC
後置にクラス中置タイプを、文字列を返します。中置ターンサフィックスは次のとおりです。
- あなたは出力を直接オペランドが発生した場合。
- あなたがスタック上に置かれる演算子を持っている場合は、左括弧は、スタックに入れて遭遇しました。
- あなたは右括弧が発生した場合には、オペレータがこれまでに左括弧に遭遇遭遇したが、左括弧が唯一のポップが出力されないまで、ポップスタック要素は出力をポップアップ表示されます。
- 「 - 」。あなたは、このような「+」、などの他の演算子がある場合は、「*」、「÷」、「(」、などそれは優先度の低い要素または空スタックのポップまで、要素に遭遇するまで、スタックからポップされますこれらの要素は、スタック上に完全なオペレータの前に遭遇します。
- あなたが入力の終わりを読めば、その後、順番にすべての要素のスタックをポップ。
呼び出した後MyDC
良好な変換サフィックス式を評価します:
- 各数字と記号式を通じて、左から右へ
- 遭遇デジタル進むスタックと、シンボルが検出され、それはスタックになり、上位2つの数字であるスタックに演算結果を算出します
- 結果を得るために、最終的な実行
スクリーンショット実験:
プログラムの結果:
クラス検出MyBCテストの結果:
クラス検出MYDCテストの結果:
ネットワークプログラミングとセキュリティ-2
ペアプログラミング:クライアントの担当1人、サーバーの担当者
- その責任の先に注意してください、我々は彼が質問しなかったことを証明するための試験に合格します
- Javaのソケットは、TCPを使用して、送信をクライアント/サーバーベースの機能を実装します
- クライアントは、ユーザーが中置式を入力することができ、その後、後置記法関数にMyBC.javaの中置式を呼び出して、後置式は、ネットワークを介してサーバに送信されます
- Postfixのサーバは、通話機能MyDC.javaのpostfixの式の計算値を受け取り、クライアントに結果を送信します
- 客户端显示服务器发送过来的结果
- 上传测试结果截图和码云链接
实验步骤:
套接字是一个网络连接的端点。在java中,使用java.net.Socket
对象来表示一个套接字。要创建一个套接字,可以使用Socket
的构造方法。
一旦成功创建了Socket
类的一个实例,就可以使用它发送或接收字节流。
ServerSocket
是服务器套接字的一个实现。ServerSocket
和Socket
不同,服务器套接字的角色是等待来自客户端的连接请求。一旦服务器套接字获得了一个连接请求,它就会创建一个Socket
实例,以处理和客户端的通信。
客户端
客户端提醒用户输入一个中缀式,之后将中缀式传给服务端,最后将服务端传回的结果反馈给用户。服务器
服务端调用MyDC
,MyDC
调用MyBC
,将中缀式转化为后缀式,之后MyDC
对后缀式进行其进行求值,之后将求出的值传给客户端
实验截图:
- 正常情况
- 客户端:
- 服务器:
- 异常情况
- 客户端:
- 服务器:
网络编程与安全-3
加密结对编程:1人负责客户端,一人负责服务器
- 注意责任归宿,要会通过测试证明自己没有问题
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后通过网络把密文发送给服务器
- 服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
- 上传测试结果截图和码云链接
实验步骤:
- 加解密步骤首先需要生成密钥,使用
KeyGeneratorkg=KeyGenerator.getInstance("DESede");
获取密钥生成器,之后初始化密钥生成器并生成密钥。通过对象序列化方式将密钥保存在文件中
2、解密时需要使用字节数组形式的密钥,因此需要将密钥以另一种方式保存在文件中。首先获取密钥并创建文件输入流,然后将其作为参数传递给对象输入流,最后执行对象输入流的readObject( )
方法读取密钥对象。之后需要强制转换成Key
类型,使返回的编码放在byte类型的数组中并保存密钥编码格式,创建文件输出流对象,在其参数中指定文件名,如keykb1.dat
。然后执行文件输出流的write( )
方法将得到的字节数组中的内容写入文件。
3、加密过程从文件中获取密钥,之后创建密码器并初始化密码器,接下来获取等待加密的明文,执行加密byte ctext[]=cp.doFinal(ptext);
处理加密结果,执行文件输出流将密文输出。
4、解密过程首先获取密文,之后获取密钥,创建并初始密码器后执行解密即可
实验截图:
服务器:
客户端:
网络编程与安全-4
密钥分发结对编程:1人负责客户端,一人负责服务器
- 注意责任归宿,要会通过测试证明自己没有问题
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文发送给服务器
- 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
- 服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
- 上传测试结果截图和码云链接
实验步骤:
使用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");
创建密钥
实验截图:
服务器:
客户端:
网络编程与安全-5
完整性校验结对编程:1人负责客户端,一人负责服务器
- 注意责任归宿,要会通过测试证明自己没有问题
- 基于Java Socket实现客户端/服务器功能,传输方式用TCP
- 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文和明文的MD5値发送给服务器
- 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
- 服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
- 客户端显示服务器发送过来的结果
- 上传测试结果截图和码云链接
实验步骤:
生成
MessageDigest
对象传入需要计算的字符串
计算消息摘要,使用
DigestPass.MD5(String s)
生成MD5值,服务器通过解密得到的明文利用MD5算法计算其摘要值,java.security
包中提供了计算消息摘要的方法处理计算结果
实验截图:
服务器:
客户端:
二、实验过程中遇到的问题及其解决
- 问题1:
实验三刚开始在同伴的电脑上运行不出结果并一直报错
- 问题1解决方案:
经过许多尝试后我们还是没能解决,但是将代码拷贝到我的电脑中之后运行,结果正常
三、码云链接
四、参考代码
ファイブ、PSP時間
ステップ | 消費(分) | パーセンテージ |
---|---|---|
要件分析 | 45 | 19.0パーセント |
デザイン | 30 | 10.2% |
コードの実装 | 72 | 30.4パーセント |
テスト | 40 | 16.9% |
分析の概要 | 50 | 21.1パーセント |