2018-2019-2 20175204急流ジェン実験ファイブ「ネットワークプログラミングおよびセキュリティ」テストレポート
実験5「ネットワークプログラミングとセキュリティ」
実験:
1.ネットワークプログラミングとセキュリティ-1
ジョブの詳細の
ペアは、ペア・プログラミング:
0参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA
1 MyBC.javaノード機能は、トランスフェクト後置式の中置式実現
2。上記の機能から得たペア実現表現はMyDC.java呼び出し、機能の後置式を実装する
コードとコードのリンククラウドの3アップロードテスト実行結果のスクリーンショットを
2.ネットワークプログラミングとセキュリティ-2
ペアプログラミング:クライアントの担当1人、サーバーの担当者
- その責任の先に注意してください、我々は彼が質問しなかったことを証明するための試験に合格します
- Javaのソケットは、TCPを使用して、送信をクライアント/サーバーベースの機能を実装します
- クライアントは、ユーザーが中置式を入力することができ、その後、後置記法関数にMyBC.javaの中置式を呼び出して、後置式は、ネットワークを介してサーバに送信されます
- Postfixのサーバは、通話機能MyDC.javaのpostfixの式の計算値を受け取り、クライアントに結果を送信します
- クライアントは、サーバーから送信された結果を表示します
- テスト結果は、スクリーンショットや雲のリンクコードをアップロード
3.ネットワークプログラミングとセキュリティ-3
暗号化ペアプログラミング:クライアントが1人に責任がある、サーバーの担当者
- その責任の先に注意してください、我々は彼が質問しなかったことを証明するための試験に合格します
- Javaのソケットは、TCPを使用して、送信をクライアント/サーバーベースの機能を実装します
- クライアントは、ネットワークを介してサーバに送信された暗号文に3DESやAES暗号化アルゴリズムの後postfixの機能、後置式に、その後のコールMyBC.javaの中置式、ユーザーは中置式を入力することができます
- サーバは、後置表現を受信した後、復号化(およびクライアントキー配列を保存するために使用することができる交渉)、次いで、計算された値関数MyDC.javaの後置式呼び出すクライアントに結果を送信します
- クライアントは、サーバーから送信された結果を表示します
- テスト結果は、スクリーンショットや雲のリンクコードをアップロード
4.ネットワークプログラミングとセキュリティ-4
キー配布ペアプログラミング:クライアントが1人に責任がある、サーバーの担当者
- その責任の先に注意してください、我々は彼が質問しなかったことを証明するための試験に合格します
- Javaのソケットは、TCPを使用して、送信をクライアント/サーバーベースの機能を実装します
- クライアントは、中置式を入力するようにユーザを可能にし、postfixの機能、3DESやAES暗号化アルゴリズムを使用して、ネットワークを介してサーバに送信された後置式の暗号文へのコールMyBC.javaの中置式
- DHでのクライアントとサーバの鍵交換アルゴリズム3DESやAESアルゴリズム
- サーバは、後置式が解読された受信した後、値を計算する関数MyDC.javaの後置式を呼び出し、クライアントに結果を送信した後、
- クライアントは、サーバーから送信された結果を表示します
- テスト結果は、スクリーンショットや雲のリンクコードをアップロード
5.ネットワークプログラミング及びセキュリティ-5
実験5ネットワークプログラミングおよびセキュリティ-5
ペアプログラミングの整合性チェック:クライアントの担当1人、サーバーの担当者
- その責任の先に注意してください、我々は彼が質問しなかったことを証明するための試験に合格します
- Javaのソケットは、TCPを使用して、送信をクライアント/サーバーベースの機能を実装します
- クライアントは、ユーザが中置式を入力することができ、その後、postfixの関数に呼び出しMyBC.javaの中置式は、後置式の暗号文と平文MD5志は、ネットワークと3DESやAES暗号化アルゴリズムに送られますサーバー
- DHでのクライアントとサーバの鍵交換アルゴリズム3DESやAESアルゴリズム
- サーバは後置式は、復号された平文MD5計算値を復号化している受信、およびMD5は、機能を比較してくるクライアントが一貫したMyDC.java計算値の後置式と呼ばれた後、その結果にを送信クライアント
- クライアントは、サーバーから送信された結果を表示します
- テスト結果は、スクリーンショットや雲のリンクコードをアップロード
II。実験手順
1.タスク
1.スキャン後置スタック:
- ;オペランドスタックの設定、スタックが空である起動
-後置オペランド場合に左から右へスキャン、プッシュ;
-演算子の場合には、スタックからの出口オペレータに二つの要素終了する権利が終了した後スキャン後置式までスタックに、次に、オペレータに操作の結果を残したと。
2.実験コード
/**
* MyDC
*
* @author 20175204
* @date 2019/5/28
*/
import java.util.StringTokenizer;
import java.util.Stack;
public class MyDC {
/** constant for addition symbol */
private final char ADD = '+';
/** constant for subtraction symbol */
private final char SUBTRACT = '-';
/** constant for multiplication symbol */
private final char MULTIPLY = '*';
/** constant for division symbol */
private final char DIVIDE = '/';
/** the stack */
private Stack<Integer> stack;
public MyDC() {
stack = new Stack<Integer>();
}
public int evaluate (String expr)
{
int op1, op2, result = 0;
String token;
StringTokenizer tokenizer = new StringTokenizer (expr);
while (tokenizer.hasMoreTokens())
{
token = tokenizer.nextToken();
//如果是运算符,调用isOperator
if (isOperator(token))
{
op2 = (stack.pop()).intValue();
//从栈中弹出操作数2
op1 = (stack.pop()).intValue();
//从栈中弹出操作数1
result = evalSingleOp(token.charAt(0),op1,op2);
//根据运算符和两个操作数调用evalSingleOp计算result;
stack.push(new Integer(result));
//计算result入栈;
}
else//如果是操作数
stack.push(new Integer(Integer.parseInt(token)));
//操作数入栈;
}
return result;
}
private boolean isOperator (String token)
{
return ( token.equals("+") || token.equals("-") ||
token.equals("*") || token.equals("/") );
}
private int evalSingleOp (char operation, int op1, int op2)
{
int result = 0;
switch (operation)
{
case ADD:
result = op1 + op2;
break;
case SUBTRACT:
result = op1 - op2;
break;
case MULTIPLY:
result = op1 * op2;
break;
case DIVIDE:
result = op1 / op2;
}
return result;
}
}
3.テストコード
import java.util.Scanner;
public class MyDCTester {
public static void main (String[] args) {
String expression, again;
int result;
try
{
Scanner in = new Scanner(System.in);
do
{
MyDC evaluator = new MyDC();
System.out.println ("Enter a valid postfix expression: ");
expression = in.nextLine();
result = evaluator.evaluate (expression);
System.out.println();
System.out.println ("That expression equals " + result);
System.out.print ("Evaluate another expression [Y/N]? ");
again = in.nextLine();
System.out.println();
}
while ("y".equalsIgnoreCase(again));
}
catch (Exception IOException)
{
System.out.println("Input exception reported");
}
}
}
4.実験スクリーン
5.MyBC
-スタック、ストレージオペレータの確立は、第一のスタックが空である;
-操作出会い、直接出力の数、および2つのオペランドとしてスペースを出力した場合、右スキャン共役式左からデリミタ;
-あなたは、スタックレベルにスタックの最上部よりも高いスタックの上部と比較演算子を、遭遇し、又はスタック出力、セパレータとしての空間の、出力の上部を出る場合、
-あなたが左括弧が発生した場合、プッシュ;あなたは右括弧が発生した場合のみ、左括弧後退するまで、それは、ディスタック出力された;
-スタックが空になったとき、結果は後置式の出力です。
6.実験コード
/**
* MyDC
*
* @author 20175204
* @date 2019/5/28
*/
import java.util.StringTokenizer;
import java.util.Stack;
public class MyBC{
private Stack<Character> stack1;
public char Precede(char a,char b)
{
if(a=='#')
if(b!='#')
return '<';
else
return '=';
if(a==')')
return '>';
if(a=='(')
if(b!=')')
return '<';
else
return '=';
if(a=='/'||a=='*')
if(b!='(')
return '>';
else
return '<';
if(a=='-'||a=='+')
if(b!='*'&&b!='/'&&b!='(')
return '>';
else
return '<';
return '>';
}
public MyBC() {
stack1 = new Stack<Character>();
stack1.push('#');
}
public String turn(String expr) {
int result = 0;
String token;
char topelem,optr;
char[] exper1 = new char[100];
int i = 0;
StringTokenizer tokenizer = new StringTokenizer (expr);
while (tokenizer.hasMoreTokens())
{
token = tokenizer.nextToken();
if (isOperator(token))
{
topelem=stack1.peek();
optr = token.charAt(0);
if(Precede(topelem,optr)=='<')
{
stack1.push(optr);
}
else if(Precede(topelem,optr)=='=')
{
optr =stack1.pop();
exper1[i++] = optr;
exper1[i++] = ' ';
}
else if(Precede(topelem,optr)=='>')
{
optr =stack1.pop();
exper1[i++] = optr;
exper1[i++] = ' ';
}
}
else if(token.equals("(")) {
optr = token.charAt(0);
stack1.push(optr);
}
else if(token.equals(")")) {
optr = stack1.pop();
while(optr!='(')
{
exper1[i++] = optr;
exper1[i++] = ' ';
optr = stack1.pop();
}
}
else
{
optr = token.charAt(0);
//System.out.println(optr);
exper1[i++]=optr;
exper1[i++] = ' ';
}
}
while(!stack1.isEmpty())
{
optr = stack1.pop();
if(optr!='#'){
exper1[i++] = optr;
exper1[i++] = ' ';
}
}
return ToString(exper1);
}
//@Override
private boolean isOperator(String token)
{
return (token.equals("+") || token.equals("-") ||token.equals("*") || token.equals("/") );
}
public static String ToString(char[] exper1){
int length = exper1.length;
String str=" ";
for(int i=0;i<length;i++)
{
str=str+exper1[i];
}
return str;
}
}
7.実験スクリーンショット