20172305 2017-2018-2 《程序設計與數據結構》實驗五報告
課程:《程序設計與數據結構》
班級: 1723
姓名: 譚鑫
學號:20172305
實驗教師:王志強
實驗日期:2018年6月13日
必修/選修: 必修html
1.實驗內容
- 實驗五 網絡編程與安全-2:結對編程:一人負責客戶端,一人負責服務器
- 注意責任歸宿,要會經過測試證實本身沒有問題
- 基於Java Socket實現客戶端/服務器功能,傳輸方式用TCP
- 客戶端讓用戶輸入中綴表達式,而後把中綴表達式調用MyBC.java的功能轉化爲後綴表達式,把後綴表達式經過網絡發送給服務器
- 服務器接收到後綴表達式,調用MyDC.java的功能計算後綴表達式的值,把結果發送給客戶端
- 客戶端顯示服務器發送過來的結果
- 上傳測試結果截圖和碼雲連接
- 實驗五 網絡編程與安全-3:加密結對編程:1人負責客戶端,一人負責服務器
- 注意責任歸宿,要會經過測試證實本身沒有問題
- 基於Java Socket實現客戶端/服務器功能,傳輸方式用TCP
- 客戶端讓用戶輸入中綴表達式,而後把中綴表達式調用MyBC.java的功能轉化爲後綴表達式,把後綴表達式用3DES或AES算法加密後經過網絡把密文發送給服務器
- 服務器接收到後綴表達式表達式後,進行解密(和客戶端協商密鑰,能夠用數組保存),而後調用MyDC.java的功能計算後綴表達式的值,把結果發送給客戶端
- 客戶端顯示服務器發送過來的結果
- 上傳測試結果截圖和碼雲連接
- 實驗五 網絡編程與安全-4:密鑰分發結對編程:1人負責客戶端,一人負責服務器
- 注意責任歸宿,要會經過測試證實本身沒有問題
- 基於Java Socket實現客戶端/服務器功能,傳輸方式用TCP
- 客戶端讓用戶輸入中綴表達式,而後把中綴表達式調用MyBC.java的功能轉化爲後綴表達式,把後綴表達式用3DES或AES算法加密經過網絡把密文發送給服務器
- 客戶端和服務器用DH算法進行3DES或AES算法的密鑰交換
- 服務器接收到後綴表達式表達式後,進行解密,而後調用MyDC.java的功能計算後綴表達式的值,把結果發送給客戶端
- 客戶端顯示服務器發送過來的結果
- 上傳測試結果截圖和碼雲連接
- 實驗五 網絡編程與安全-5:完整性校驗結對編程:1人負責客戶端,一人負責服務器
- 注意責任歸宿,要會經過測試證實本身沒有問題
- 基於Java Socket實現客戶端/服務器功能,傳輸方式用TCP
- 客戶端讓用戶輸入中綴表達式,而後把中綴表達式調用MyBC.java的功能轉化爲後綴表達式,把後綴表達式用3DES或AES算法加密經過網絡把密文和明文的MD5値發送給服務器
- 客戶端和服務器用DH算法進行3DES或AES算法的密鑰交換
- 服務器接收到後綴表達式表達式後,進行解密,解密後計算明文的MD5值,和客戶端傳來的MD5進行比較,一致則調用MyDC.java的功能計算後綴表達式的值,把結果發送給客戶端
- 客戶端顯示服務器發送過來的結果
- 上傳測試結果截圖和碼雲連接
2. 實驗過程及結果
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流的問題。
參考資料