1. 程式人生 > >20172305 2017-2018-2 《程序設計與數據結構》實驗報告

20172305 2017-2018-2 《程序設計與數據結構》實驗報告

www 顯示 inf 字符 讀取 www. HR 發送 實驗報告

20172305 2017-2018-2 《程序設計與數據結構》實驗報告

課程:《程序設計與數據結構》
班級: 1723
姓名: 譚鑫
學號:20172305
實驗教師:王誌強
實驗日期:2018年6月13日
必修/選修: 必修

1.實驗內容

  • 實驗五 網絡編程與安全-1:兩人一組結對編程
      1. 參考
      1. 結對實現中綴表達式轉後綴表達式的功能 MyBC.java
      1. 結對實現從上面功能中獲取的表達式中實現後綴表達式求值的功能,調用MyDC.java
      1. 上傳測試代碼運行結果截圖和碼雲鏈接
  • 實驗五 網絡編程與安全-2:結對編程:一人負責客戶端,一人負責服務器
      1. 註意責任歸宿,要會通過測試證明自己沒有問題
      1. 基於Java Socket實現客戶端/服務器功能,傳輸方式用TCP
      1. 客戶端讓用戶輸入中綴表達式,然後把中綴表達式調用MyBC.java的功能轉化為後綴表達式,把後綴表達式通過網絡發送給服務器
      1. 服務器接收到後綴表達式,調用MyDC.java的功能計算後綴表達式的值,把結果發送給客戶端
      1. 客戶端顯示服務器發送過來的結果
      1. 上傳測試結果截圖和碼雲鏈接
  • 實驗五 網絡編程與安全-3:加密結對編程:1人負責客戶端,一人負責服務器
      1. 註意責任歸宿,要會通過測試證明自己沒有問題
      1. 基於Java Socket實現客戶端/服務器功能,傳輸方式用TCP
      1. 客戶端讓用戶輸入中綴表達式,然後把中綴表達式調用MyBC.java的功能轉化為後綴表達式,把後綴表達式用3DES或AES算法加密後通過網絡把密文發送給服務器
      1. 服務器接收到後綴表達式表達式後,進行解密(和客戶端協商密鑰,可以用數組保存),然後調用MyDC.java的功能計算後綴表達式的值,把結果發送給客戶端
      1. 客戶端顯示服務器發送過來的結果
      1. 上傳測試結果截圖和碼雲鏈接
  • 實驗五 網絡編程與安全-4:密鑰分發結對編程:1人負責客戶端,一人負責服務器
      1. 註意責任歸宿,要會通過測試證明自己沒有問題
      1. 基於Java Socket實現客戶端/服務器功能,傳輸方式用TCP
      1. 客戶端讓用戶輸入中綴表達式,然後把中綴表達式調用MyBC.java的功能轉化為後綴表達式,把後綴表達式用3DES或AES算法加密通過網絡把密文發送給服務器
      1. 客戶端和服務器用DH算法進行3DES或AES算法的密鑰交換
      1. 服務器接收到後綴表達式表達式後,進行解密,然後調用MyDC.java的功能計算後綴表達式的值,把結果發送給客戶端
      1. 客戶端顯示服務器發送過來的結果
      1. 上傳測試結果截圖和碼雲鏈接
  • 實驗五 網絡編程與安全-5:完整性校驗結對編程:1人負責客戶端,一人負責服務器
      1. 註意責任歸宿,要會通過測試證明自己沒有問題
      1. 基於Java Socket實現客戶端/服務器功能,傳輸方式用TCP
      1. 客戶端讓用戶輸入中綴表達式,然後把中綴表達式調用MyBC.java的功能轉化為後綴表達式,把後綴表達式用3DES或AES算法加密通過網絡把密文和明文的MD5値發送給服務器
      1. 客戶端和服務器用DH算法進行3DES或AES算法的密鑰交換
      1. 服務器接收到後綴表達式表達式後,進行解密,解密後計算明文的MD5值,和客戶端傳來的MD5進行比較,一致則調用MyDC.java的功能計算後綴表達式的值,把結果發送給客戶端
      1. 客戶端顯示服務器發送過來的結果
      1. 上傳測試結果截圖和碼雲鏈接

2. 實驗過程及結果

  • (1)網絡編程與安全-1:測試MyBC和MyDC的代碼,但是老師說可以用之前各組編寫的四則運算的代碼,所以我用的是我們組的中綴轉後綴和計算結果的兩個方法進行測試的。
    技術分享圖片

  • (2)網絡編程與安全-2:在證明自己電腦與別的電腦連接不上的前提下,我使用虛擬機替代另一臺電腦進行的傳輸,通過客戶端輸入的中綴表達式,轉換成後綴表達式在傳輸到服務端進行計算。最最重要的一部分就是端口和IP一定要註意寫對!!
    技術分享圖片
    技術分享圖片

  • (3)網絡編程與安全-3:開始加密傳輸,在客戶端將後綴表達式進行加密傳輸,到服務器端進行解密計算,然後在傳回來。最困難的部分就是進行密鑰的傳輸,在下面遇到的問題和解決辦法中具體詳述。
    技術分享圖片
    技術分享圖片

  • (4)網絡編程與安全-4:運用DH算法進行加解密,先要理解雙方的產生的兩個密鑰,再把公鑰相互傳輸過去,通過兩個密鑰產生終極密鑰進行加密和解密。
    技術分享圖片
    技術分享圖片

  • (5)網絡編程與安全-5:客戶端傳輸密文和MD5,然後在服務端產生MD5,將兩個MD5進行對比,如果不對則說明傳輸過程中有缺失和篡改,對的話則說明傳輸過程中沒問題。這樣的話,再通過DH算法進行加密的話,增強了傳輸過程中的安全性。
    技術分享圖片
    技術分享圖片

3. 實驗過程中遇到的問題和解決過程

  • 問題1:密鑰的傳輸問題
  • 問題1的解決方案:前兩個實驗沒有加密,做起來還是比較順手的。實驗三感覺是一個分水嶺。傳輸的過程需要帶著密鑰,但是將密鑰通過QQ和微信傳過去會有損失。想將密鑰和密文以字符串的形式傳輸的話,在服務器上始終斷不開,準備將密鑰放到密文的字節數組裏,再從服務端接收數組,從數組中扣除密鑰的部分。

  • 問題2:MD5的問題
  • 問題2的解決方案:這個MD5在實驗三的練習過程中就每太懂,知識按照婁老師的博客中的要求進行練習,之前偷過的懶之後都得補回來...所以,找度娘查到MD5類似一種數字簽名,利用傳輸信息形成MD5(一串消息摘要),通過網絡傳輸過去,接收方通過解密接受過來的信息並生成對應的MD5,通過傳過來的和接收方生成的進行對比,如果一直則沒有被篡改,不一致就說明在傳輸過程中被修改了。

  • 問題3:Wrong Key Size
  • 問題3的解決方案:密鑰長度受限制,java運行時環境讀到的是受限的policy文件。但是,我在按照網上的解決辦法進行解決,在替換${jdk_home}/jre/lib/security目錄下的 local_policy.jar 和 US_export_policy.jar 文件之後,卻並無卵用...侯大哥給我加了一個一句話SecretKeySpec k =new SecretKeySpec(sb,"DESede");就可以解決。

  • 問題4:DataOutputStream和DataInputStream
  • 問題2的解決方案:這部分是在實驗四遇到的問題。查到的代碼可以實現實驗四,但是不是很懂代碼的含義。

    • writeUTF(String str)以與機器無關方式使用 UTF-8 修改版編碼將一個字符串寫入基礎輸出流。
    • DataOutputStream,數據輸出流允許應用程序以適當方式將基本Java數據類型寫入輸出流中。然後,應用程序可以使用數據輸入流將數據讀入。
    • 數據輸入流允許應用程序以與機器無關方式從底層輸入流中讀取基本Java數據類型。應用程序可以使用數據輸出流寫入稍後由數據輸入流讀取的數據。

其他

實驗五就是不斷的在兩臺電腦之間傳輸信息,顯示明文傳輸到後來的密文傳輸,一個密鑰到兩個密鑰的加密,還有MD5的傳輸。在練習的過程中遇到了很多關於密碼的問題,也學習很多關於IO流的問題。

參考資料

  • Java 密碼學算法

20172305 2017-2018-2 《程序設計與數據結構》實驗報告