Java网络编程及安全
一、實驗內容:
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加密,在網絡連接,傳送,反饋上也有很多很難的地方,遇到有問題的地方往往需要上網翻閱很多資料才能找到適合的解決方案,在對代碼的不斷調試、改進、調試、改進后編譯成功。
轉載于:https://www.cnblogs.com/vioczw/p/4570338.html
總結
以上是生活随笔為你收集整理的Java网络编程及安全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Task的使用
- 下一篇: 如何用互联网上的广告来赚取广告费——有点