天天看點

20145308劉昊陽 《Java程式設計》實驗五報告

20145308劉昊陽 《Java程式設計》實驗五 Java網絡程式設計及安全 實驗報告

實驗名稱

Java網絡程式設計及安全

實驗内容

1.掌握Socket程式的編寫;

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

3.設計安全傳輸系統。

統計的PSP(Personal Software Process)時間

步驟 耗時(min) 百分比
需求分析 20~30 17%
設計
代碼實作 10~20 11%
測試 50~60 33%
分析總結 30~40 22%

實驗步驟

  • 我是做的伺服器端,我的結伴對象是20145325張梓靖,位址:http://www.cnblogs.com/zzjzzjzzj/p/5471240.html
  • 1.先利用示例代碼運作,監聽用戶端
import java.io.*;
import java.net.*;
/**
 * 複用連接配接的echo伺服器
 * 功能:将用戶端發送的内容回報給用戶端
 */
public class MulSocketServer {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket socket = null;
        OutputStream os = null;
        InputStream is = null;
        //監聽端口号
        int port = 10000;
        try {
            //建立連接配接
            serverSocket = new ServerSocket(port);
            System.out.println("伺服器已啟動:");
            //獲得連接配接
            socket = serverSocket.accept();
            //初始化流
            is = socket.getInputStream();
            os = socket.getOutputStream();
            byte[] b = new byte[1024];
            for(int i = 0;i < 2;i++){
                int n = is.read(b);
                //輸出
                System.out.println("用戶端發送内容為:" + new String(b,0,n));
                //向用戶端發送回報内容
                os.write(b, 0, n);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try{
                //關閉流和連接配接
                os.close();
                is.close();
                socket.close();
                serverSocket.close();
            }catch(Exception e){}
        }
    }
}

           
  • 接收到對方傳送的字元串
    20145308劉昊陽 《Java程式設計》實驗五報告
  • 2.生成公鑰、私鑰
KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
        kpg.initialize(1024);
        KeyPair kp=kpg.genKeyPair();
        PublicKey pbkey=kp.getPublic();
        PrivateKey prkey=kp.getPrivate();

        FileOutputStream  f1=new FileOutputStream("Skey_RSA_pub.dat");
        ObjectOutputStream b1=new  ObjectOutputStream(f1);
        b1.writeObject(pbkey);

        FileOutputStream  f2=new FileOutputStream("Skey_RSA_priv.dat");
        ObjectOutputStream b2=new  ObjectOutputStream(f2);
        b2.writeObject(prkey);

    
    
           
20145308劉昊陽 《Java程式設計》實驗五報告
  • 3.利用解密算法對收到的密文進行解密
BufferedReader in=
                new BufferedReader(new InputStreamReader(new FileInputStream("Enc_RSA.dat")));
        String ctext=in.readLine();
        BigInteger c=new BigInteger(ctext);

        FileInputStream f=new FileInputStream("Skey_RSA_priv.dat");
        ObjectInputStream b=new ObjectInputStream(f);
        RSAPrivateKey prk=(RSAPrivateKey)b.readObject( );
        BigInteger d=prk.getPrivateExponent();
        BigInteger n=prk.getModulus();
        System.out.println("d= "+d);
        System.out.println("n= "+n);

        BigInteger m=c.modPow(d,n);
        System.out.println("m= "+m);
        byte[] mt=m.toByteArray();
        System.out.println("PlainText is ");
        for(int i=0;i<mt.length;i++){
            System.out.print((char) mt[i]);

           
FileInputStream f=new FileInputStream("SEnc.dat");
        int num=f.available();
        byte[ ] ctext=new byte[num];
        f.read(ctext);

        FileInputStream  f2=new FileInputStream("keykb1.dat");
        int num2=f2.available();
        byte[ ] keykb=new byte[num2];
        f2.read(keykb);

        SecretKeySpec k=new  SecretKeySpec(keykb,"DESede");

        Cipher cp=Cipher.getInstance("DESede");
        cp.init(Cipher.DECRYPT_MODE, k);
        byte []ptext=cp.doFinal(ctext);
        String p=new String(ptext,"UTF8");
        System.out.println(p);

           
20145308劉昊陽 《Java程式設計》實驗五報告