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

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

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

1.實驗內容

  • 實驗五 網絡編程與安全-1:兩人一組結對編程java

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

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

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

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

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

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數據類型寫入輸出流中。而後,應用程序可使用數據輸入流將數據讀入。
    • DataInputStream,數據輸入流容許應用程序以與機器無關方式從底層輸入流中讀取基本Java數據類型。應用程序可使用數據輸出流寫入稍後由數據輸入流讀取的數據。

其餘

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

參考資料

相關文章
相關標籤/搜索