課程:《程序設計與數據結構》
班級: 1723
姓名: 周亞傑
學號:20172308
實驗教師:王志強
實驗日期:2018年6月13日
必修/選修: 必修html
網絡編程與安全-1:結對實現從獲取的表達式中實現後綴表達式求值的功能java
網絡編程與安全-2:客戶端讓用戶輸入中綴表達式,而後轉化爲後綴表達式,把後綴表達式經過網絡發送給服務器,服務器接收後綴表達式,計算後綴表達式的值,把結果發送給客戶端,客戶端顯示服務器發送過來的結果算法
網絡編程與安全-3:客戶端讓用戶輸入中綴表達式,而後轉化爲後綴表達式,把後綴表達式用3DES或AES算法加密,經過網絡把密文發送給服務器,服務器接收後綴表達式,進行解密(和客戶端協商密鑰),而後計算後綴表達式的值,把結果發送給客戶端,客戶端顯示服務器發送過來的結果編程
網絡編程與安全-4:客戶端讓用戶輸入中綴表達式,而後轉化爲後綴表達式,把後綴表達式用3DES或AES算法加密,經過網絡把密文發送給服務器,客戶端和服務器用DH算法進行3DES或AES算法的密鑰交換,服務器接收後綴表達式,進行解密,而後計算後綴表達式的值,把結果發送給客戶端,客戶端顯示服務器發送過來的結果數組
網絡編程與安全-5:客戶端讓用戶輸入中綴表達式,而後轉化爲後綴表達式,把後綴表達式用3DES或AES算法加密,經過網絡把密文和明文的MD5値發送給服務器,客戶端和服務器用DH算法進行3DES或AES算法的密鑰交換,服務器接收後綴表達式,進行解密,解密後計算明文的MD5值,和客戶端傳來的MD5進行比較,一致則計算後綴表達式的值,把結果發送給客戶端,客戶端顯示服務器發送過來的結果安全
網絡編程與安全-1:
1.利用之前編寫的四則運算代碼結對實現中綴表達式轉後綴表達式的功能
2.利用之前編寫的四則運算代碼結對實現從上面功能中獲取的表達式中實現後綴表達式求值的功能
3.實驗結果截圖:
服務器
網絡編程與安全-2:
1.客戶端讓用戶輸入中綴表達式,而後把中綴表達式調用MyBC.java的功能轉化爲後綴表達式,把後綴表達式經過網絡發送給服務器
2.服務器接收到後綴表達式,計算後綴表達式的值,把結果發送給客戶端
3.客戶端顯示服務器發送過來的結果
4.實驗結果截圖:
網絡
問題1:實驗2中,一個小問題,輸入中綴表達式,按回車後,在客戶端轉後綴的時候出現了問題:數據結構
問題1解決過程:通過幾回實驗,發現了致使這個奇怪現象的緣由。如今來回顧一下我當時的操做:咱們的中綴轉後綴表達式,須要在操做數與操做符之間留有空格,以便調用Stringtokenizer方法經行分割、計算。然而事實上我也是那麼作的,可是細節就是:我按照順序一個操做數,空格,一個操做符地輸入,可是忽然我就少輸入了一個空格,因而我就用鍵盤上地移動鍵將光標移動到操做符與操做數之間,而後敲上空格,而後回車。因而。。。就錯了,是的,我應該再把光標移動到最後一個輸入的字符後面回車地。。。多線程
問題2:實驗3中,傳輸的後綴表達式到服務器端顯示的是一串亂碼。。。
問題2解決過程:本來代碼寫的是outputstreamwriter,可是它只能傳輸字符串類型數據,因此把輸出改爲字節流的outputstream,便可輸出字節類型
問題3:實驗4中,首先感到疑惑的是,要產生密鑰,須要本身的私鑰和對方的公鑰進行合成,這就涉及到一個問題:如何將本身(客戶端)的公鑰傳給服務器。按照婁老師的博客已經給出的代碼,咱們能夠作到把生成的密鑰存放進文件當中並讀取,可是作不到把文件傳給服務器。而後又出現的一個問題是,如圖:
額,這是借來的圖。。。可是問題是同樣的,提示密鑰長度,還有wrong key size。
問題3解決過程:雖然咱們能夠從文件中讀取出密鑰來,可是首先仍是得有對方的公鑰啊,那如何得到呢?代碼也不會寫。。。因此咱們選擇充分利用現代科學技術。。。利用騰訊QQ進行文件傳輸。對於後面的那個密鑰長度問題,百度了一下DES算法,它的密鑰長度是168位的,可是隻有112位有效。而AES算法256位。因此作出如圖的修改:
代碼中AES的密鑰長度設置也要改爲256,再運行一下就OK了。
問題4:實驗5中,遇到的問題本應該在實驗四中就出現,可是咱們用了QQ傳遞文件從而避免了這個問題,那就是:如何從客戶端發送多條消息給服務器,並讓其成功接受
問題4解決過程:
這個問題很難解決。主要是不知道如何去傳,如何去收。百度了一下這個問題:主要是涉及到了多線程的問題。客戶端發送一條數據給服務器,服務器直接收就好了,可是若是要再發一條呢?客戶端再寫一條同樣的發送語句?那服務器端如何識別呢?怎麼識別、接受呢?關於這個問題網上雖然也有一些介紹,可是資源有限,嘗試了一些可能的看得懂的代碼。按道理來講應該是行得通的,可是IDEA老是提示錯誤,這個錯誤也看不懂,不理解。並且服務器也收不到兩條數據,甚至第一條也沒了。
因而,咱們換了條思路,把兩條數據(密文和明文的MD5值)都寫進一條傳輸的語句當中,而後在服務器端,把前面的密文都出來保存起來,把後面的MD5值讀出來保存起來。這樣算是解決了這個實驗當中的關鍵部分。
問題5:實驗五當中還出現了一個十分神奇的現象,如圖:
本應該出現密文的地方,出現瞭如上圖所示的一長串相同的數字。這個是真的絕望。。。
問題5產生的分析(解決不了。。。):咱們當時的作法就是像問題4中說的那樣,把兩條數據都寫在一個輸出語句中。但這樣就有兩種作法:一是把字節型的密文轉換成字符串類型;二是把字符串類型的MD5值寫進存放密文的字節數組。咱們選擇了前者,因而咱們寫了一個循環,把字節數組裏的數據都做爲字符串類型,一個一個輸出出來了,可是最後致使的問題就是如問題5所敘述的那樣,客戶端輸出的結果是正確無誤的,可是傳到服務器端以後,顯示出來的就是如上圖所示的那個鬼樣子。。。後來實在出於無奈,解決不了這個問題(只好放棄了),就換了第二種作法。最終作出告終果。