Java實驗報告五:Java網路編程及安全

來源:互聯網
上載者:User

標籤:

Java實驗報告五:Java網路編程及安全

                                                                                                     20135315  宋宸寧

一、實驗內容

1.掌握Socket程式的編寫;

2.掌握密碼技術的使用;

3.設計安全傳輸系統。

二、實驗步驟

1. 基於Java Socket實現安全傳輸

2. 基於TCP實現用戶端和伺服器,結對程式設計一人負責用戶端,一人負責伺服器

3. 使用Git進資料列版本設定

4. 選擇對稱演算法進行資料加解密.

5. 選擇非對稱演算法對對稱式加密密鑰進行密鑰分發.

6. 選擇合適的Hash演算法進行完整性驗證.

7. 選擇合適的演算法對Hash值進行簽名/驗證.

三、設計思路

我的結隊夥伴是蘆暢:http://www.cnblogs.com/bonjourvivi/p/4565004.html

1.我負責的是伺服器的部分,在用戶端Client程式中輸入明文“Hello World!”然後利用隨機秘鑰發生器產生DES秘鑰,經過秘鑰擴充,將擴充秘鑰應用IO流存入檔案keykb1.dat中,並列印輸出擴充秘鑰。

            String s="Hello World!";                        KeyGenerator kg=KeyGenerator.getInstance("DESede");            kg.init(168);             SecretKey k=kg.generateKey( );            byte[ ] kb=k.getEncoded( );            FileOutputStream  fk=new FileOutputStream("keykb1.dat");            fk.write(kb);            for(int i=0;i<kb.length;i++){                 System.out.print(kb[i]+",");//列印擴充秘鑰            }

2.將明文加密,並將密文以UTF8編碼方式列印出來

Cipher cp=Cipher.getInstance("DESede");            cp.init(Cipher.ENCRYPT_MODE, k);            byte ptext[]=s.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] +",");            }

3.傳遞密文給伺服器

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

4.用戶端利用伺服器的公開密鑰,將祕密金鑰加密傳遞給伺服器

FileInputStream f=new FileInputStream("Skey_RSA_pub.dat");            ObjectInputStream b=new ObjectInputStream(f);            RSAPublicKey  pbk=(RSAPublicKey)b.readObject( );            BigInteger e=pbk.getPublicExponent();            BigInteger n=pbk.getModulus();            System.out.println("e= "+e);            System.out.println("n= "+n);            byte ptext1[]=s.getBytes("UTF8");            BigInteger m=new BigInteger(ptext1);            BigInteger c=m.modPow(e,n);            System.out.println("c= "+c);            String cs=c.toString( );            BufferedWriter out1=               new BufferedWriter(new OutputStreamWriter(                new FileOutputStream("Enc_RSA.dat")));            out1.write(cs,0,cs.length( ));            out1.close( );

9.用戶端用hash函數給明文加密,將明文的雜湊值通過IO流傳遞給密文

            String x=s;
             MessageDigest md5=MessageDigest.getInstance("MD5");             md5.update(x.getBytes( ));             byte smd5[ ]=md5.digest( );             String result="";             for (int i=0; i<smd5.length; i++){                result+=Integer.toHexString((0x000000ff & smd5[i]) |                     0xffffff00).substring(6);             }             System.out.println(result);
        out.println(result);

四、實驗結果

用戶端

 

五、遇到的問題

兩個人進行測試時,伺服器與用戶端已成功串連,但是伺服器不顯示結果,當自己相連時,會出現伺服器結果,但是會被用戶端結果覆蓋,但可以快速截下結果,且結果正確。

六、解決辦法

在一台電腦上實現資料的加解密傳輸。

七、統計時間

 

步驟

耗時

百分比

需求分析

 3h

 27.3%

設計

 1h 9.1%

代碼實現

 2h 18.2%

測試

 4h 36.4%

分析總結

 1h  9.1%

Java實驗報告五: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.