20145308劉昊陽 《Java程序設計》實驗五 Java網絡編程及安全 實驗報告
實驗名稱
Java網絡編程及安全
實驗內容
1.掌握Socket程序的編寫;
2.掌握密碼技術的使用;
3.設計安全傳輸系統。
統計的PSP(Personal Software Process)時間
步驟 | 耗時(min) | 百分比 |
---|---|---|
需求分析 | 20~30 | 17% |
設計 | 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){}}}
}
接收到對方傳送的字符串
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);
- 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);