2017-2018-2 20165325 實驗五《網絡編程與安全》實驗報告

1、網絡編程與安全-1

一、檢查點要求

兩人一組結對編程:html

  1. 參考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA
  2. 結對實現中綴表達式轉後綴表達式的功能 MyBC.java
  3. 結對實現從上面功能中獲取的表達式中實現後綴表達式求值的功能,調用MyDC.java
  4. 上傳測試代碼運行結果截圖和碼雲連接

二、實驗截圖

測試代碼運行結果截圖以下:java

上圖爲MyBC.java功能截圖;git

上圖爲MyDC.java功能截圖;算法

三、碼雲連接

MyBC.java : https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/MyBC.java數據庫

MyDC.java : https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/MyDC.java編程

TestMyBC.java : https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/Test/TestMyBC.java數組

TestMyDC.java : https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/Test/TestMyDC.java安全

注:上述代碼實現的是整數狀況下的加減乘除運算,若要求實現分數運算功能,詳見碼雲連接:分數功能的四則運算項目連接服務器

2、網絡編程與安全-2

一、檢查點要求

結對編程:1人負責客戶端,一人負責服務器網絡

  1. 注意責任歸宿,要會經過測試證實本身沒有問題
  2. 基於Java Socket實現客戶端/服務器功能,傳輸方式用TCP
  3. 客戶端讓用戶輸入中綴表達式,而後把中綴表達式調用MyBC.java的功能轉化爲後綴表達式,把後綴表達式經過網絡發送給服務器
  4. 服務器接收到後綴表達式,調用MyDC.java的功能計算後綴表達式的值,把結果發送給客戶端
  5. 客戶端顯示服務器發送過來的結果
  6. 上傳測試結果截圖和碼雲連接

二、實驗截圖

測試代碼運行結果截圖以下:

上圖爲單機測試;

上圖爲客戶端測試;

服務器端測試截圖詳見搭檔博客。

三、碼雲連接

Client.java:https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Client.java

Server.java:https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Server.java

3、網絡編程與安全-3

一、檢查點要求

加密結對編程:1人負責客戶端,一人負責服務器

  1. 注意責任歸宿,要會經過測試證實本身沒有問題
  2. 基於Java Socket實現客戶端/服務器功能,傳輸方式用TCP
  3. 客戶端讓用戶輸入中綴表達式,而後把中綴表達式調用MyBC.java的功能轉化爲後綴表達式,把後綴表達式用3DES或AES算法加密後經過網絡把密文發送給服務器
  4. 服務器接收到後綴表達式表達式後,進行解密(和客戶端協商密鑰,能夠用數組保存),而後調用MyDC.java的功能計算後綴表達式的值,把結果發送給客戶端
  5. 客戶端顯示服務器發送過來的結果
  6. 上傳測試結果截圖和碼雲連接

二、實驗截圖

測試結果截圖以下:

上圖爲單機測試(客戶端);

上圖爲單機測試(服務器);

上圖爲客戶端聯機測試;

服務器聯機測試見搭檔博客;

三、碼雲連接

碼雲連接:

Client_2.java:https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Client_2.java

Server_2.java:https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Server_2.java

Skey.java:https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Skey.java

Skey_kb.java:https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Skey_kb.java

4、網絡編程與安全-4

一、檢查點要求

密鑰分發結對編程:1人負責客戶端,一人負責服務器

  1. 注意責任歸宿,要會經過測試證實本身沒有問題
  2. 基於Java Socket實現客戶端/服務器功能,傳輸方式用TCP
  3. 客戶端讓用戶輸入中綴表達式,而後把中綴表達式調用MyBC.java的功能轉化爲後綴表達式,把後綴表達式用3DES或AES算法加密經過網絡把密文發送給服務器
  4. 客戶端和服務器用DH算法進行3DES或AES算法的密鑰交換
  5. 服務器接收到後綴表達式表達式後,進行解密,而後調用MyDC.java的功能計算後綴表達式的值,把結果發送給客戶端
  6. 客戶端顯示服務器發送過來的結果
  7. 上傳測試結果截圖和碼雲連接

二、實驗截圖

測試結果截圖如圖所示:

上圖爲單機測試(客戶端);

上圖爲單機測試(服務器);

上圖爲客戶端聯機測試;

服務器聯機測試見搭檔博客;

三、碼雲連接

碼雲連接:

https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Client_3.java

https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/KeyAgree.java

https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Key_DH.java

https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Server_3.java

5、網絡編程與安全-5

一、檢查點要求

實驗五 網絡編程與安全-5

完整性校驗結對編程:1人負責客戶端,一人負責服務器

  1. 注意責任歸宿,要會經過測試證實本身沒有問題
  2. 基於Java Socket實現客戶端/服務器功能,傳輸方式用TCP
  3. 客戶端讓用戶輸入中綴表達式,而後把中綴表達式調用MyBC.java的功能轉化爲後綴表達式,把後綴表達式用3DES或AES算法加密經過網絡把密文和明文的MD5値發送給服務器
  4. 客戶端和服務器用DH算法進行3DES或AES算法的密鑰交換
  5. 服務器接收到後綴表達式表達式後,進行解密,解密後計算明文的MD5值,和客戶端傳來的MD5進行比較,一致則調用MyDC.java的功能計算後綴表達式的值,把結果發送給客戶端
  6. 客戶端顯示服務器發送過來的結果
  7. 上傳測試結果截圖和碼雲連接

二、實驗截圖

上圖爲單機測試(客戶端);

上圖爲單機測試(服務器);

上圖爲客戶端聯機測試;

服務器聯機測試見搭檔博客;

三、碼雲連接

碼雲連接:

https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Client_4.java

https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/DigestPass.java

https://gitee.com/BESTI-IS-JAVA-2018/20165325/blob/master/Exp5/src/Server_4.java


附:遇到的問題

一、StringBuffer類的測試

在Test類的assertEquals()中不能調用兩個StringBuffer類做比較,最好用.toString()方法轉化爲字符串進行比較。

二、JAVA中的goto語句

在檢查點1的開發中,我忽然想用一個「JAVA中的goto語句」實現。上網查詢連接以下:

http://blog.51cto.com/lavasoft/178997

三、錯誤:java.net.SocketException: Connection reset

參考連接:

https://blog.csdn.net/u013766398/article/details/51381852/

解決辦法:

一、網絡編程時未正確捕獲java.net.SocketException, 客戶端先關閉就會報這個異常;(檢查發送數據是否符合服務器接收格式,否則的話服務器會自動斷開鏈接,這樣,socket就會被關閉,那麼你就不能使用IO流讀取數據,這樣就會報這個錯誤)

二、數據庫和應用服務器的網段不一樣(這個查看一下,可能性較小)

三、好像說防火牆的比較多。。。。(試一下,關閉)

四、大部分是網絡的緣由。提交post的東西多,而後服務器接收就超時了(這個只能說通常可能性較小)

四、關於byte數組和對象的相互轉化

首先要明確的是,轉化有特定的條件。bytes在反序列化爲Object的前提是byte[]是經過ObjectOutputStream序列化的,不然直接將一個任意的byte[]轉換成Object時會報錯,錯誤信息爲:

java.io.StreamCorruptedException: invalid stream header:

轉化方法——Byte[] 2 Object:

(byte b[])
ObjectInputStream ois = new ObjectInputStream (new ByteArrayInputStream (b));
Object o = ois.readObject();

Object 2 Byte[]:

(Object obj)
byte b[] = null;
ByteArrayInputStream bais = new ByteArrayInputStream();
ObjectOutputStream oos = new ObjectOutputStream(bais);
oos.writeObject(obj);

五、參考連接

Java 密碼學算法:http://www.cnblogs.com/rocedu/p/6683948.html

相關文章
相關標籤/搜索