Java網路編程及安全

來源:互聯網
上載者:User

標籤:

一、實驗內容:

1.運行教材上TCP代碼,結對進行,一人伺服器,一人用戶端;

2.利用加解密程式碼封裝,編譯運行代碼,一人加密,一人解密;

3.整合代碼,一人加密後通過TCP發送;

註:加密使用AES或者DES/AES或者DES加密金鑰key並發送,使用伺服器的公開金鑰加密/公開金鑰演算法使用RSA或DH/檢驗發送資訊的完整性使用MD5或者SHA3;

4.用Git進資料列版本設定。

5.完成Blog

我的結對夥伴是20135126謝飛帆

我負責的是用戶端,謝飛帆負責的是伺服器

二、實驗步驟

1.資訊安全傳送:             

      

發送方A——————>接收方B

A加密時,用B的公開金鑰

B解密時,用B的私密金鑰

  發送方A對資訊(明文)採用DES祕密金鑰加密,使用RSA加密前面的DES密鑰資訊,最終將混合資訊進行傳遞。同時用hash函數將明文進行用作驗證。

    接收方B接收到資訊後,用RSA解密DES密鑰資訊,再用RSA解密擷取到的密鑰資訊解密密文資訊,最終就可以得到我們要的資訊(明文)。用hash函數對解出的明文進行驗證,與發送過來的has

import java.net.*;

 

import java.io.*;

 

import javax.crypto.*;

 

import java.security.*;

 

import javax.crypto.Cipher;

 

 

 

public class MyClient {

 

    /**

 

     * @param args the command line arguments

 

     */

 

    public static void main(String args[]) throws Exception {

 

       

 

        //隨機密鑰產生

 

         KeyGenerator kg=KeyGenerator.getInstance("DESede");

 

         kg.init(168);

 

        SecretKey k=kg.generateKey( );

 

        FileOutputStream  f=new FileOutputStream("key1.dat");

 

             ObjectOutputStream b=new  ObjectOutputStream(f);

 

             b.writeObject(k);       

 

       

 

            //加密輸入

 

            BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

 

             System.out.print("請輸入待發送的資料:");

 

             String srt=stdin.readLine();

 

                  

 

             FileInputStream d=new FileInputStream("key1.dat");

 

             ObjectInputStream a=new ObjectInputStream(d);

 

             Key e=(Key)a.readObject( );

 

                  

 

                   Cipher cp=Cipher.getInstance("DESede");

 

        cp.init(Cipher.ENCRYPT_MODE, e);

 

                  

 

        byte ptext[]=srt.getBytes("UTF8");

 

        for(int i=0;i<ptext.length;i++){

 

        //    System.out.print(ptext[i]+",");

 

        }

 

                  

 

        System.out.println("");

 

        byte ctext[]=cp.doFinal(ptext);

 

        for(int i=0;i<ctext.length;i++){

 

        //     System.out.print(ctext[i] +",");

 

        }

 

                  

 

                   FileOutputStream f2=new FileOutputStream("SEnc.dat");

 

        f2.write(ctext);   

 

     

 

       //發送

 

      try {

 

           //建立串連特定伺服器的指定連接埠的Socket對象

 

        Socket socket = new Socket("192.168.253.1", 4431);

 

                   Socket socket1 = new Socket("192.168.253.1", 4430);

 

            //獲得從伺服器端來的網路輸入資料流

 

            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

 

            //獲得從用戶端向伺服器端輸出資料的網路輸出資料流

 

        PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);

 

             PrintWriter out1=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);

 

            //建立鍵盤輸入資料流,以便用戶端從鍵盤上輸入資訊

 

            //BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

 

            System.out.print("讀取檔案中...\n"); 

 

            FileInputStream f1=new FileInputStream("key1.dat");

 

             FileInputStream f3=new FileInputStream("SEnc.dat");

 

            //String str=stdin.readLine(); //從鍵盤讀入待發送的資料

 

            String str;

 

            out.println(f1);  //通過網路傳送到伺服器

 

             out1.println(f3);

 

           

 

            System.out.print("已發送\n"); 

 

           

 

            str=in.readLine();//從網路輸入資料流讀取結果

 

            System.out.println( "從伺服器接收到的結果為:"+str); //輸出伺服器返回的結果

 

       }

 

        catch (Exception v) {

 

            System.out.println(v);

 

        }

 

                   finally{

 

                            //stdin.close();

 

                            //in.close();

 

                            //out.close();

 

                            //socket.close();                        

 

                   }

 

     }

 

}

實驗:

四、實驗總結

 本次實驗是我和結對夥伴一起完成的。起初我們沒有任何的實驗思路,後來我們通過請教了老師和做出來實驗的同學梳理清了頭緒,明確了實驗步驟和實驗要求。把程式碼群組合起來對我們是個不小的挑戰,不僅考驗了我們的細心程度,還考察了DES演算法和RSA加密,在網路連接,傳送,反饋上也有很多很難的地方,遇到有問題的地方往往需要上網翻閱很多資料才能找到適合的解決方案,在對代碼的不斷調試、改進、調試、改進後編譯成功。

Java網路編程及安全

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.