標籤:
北京電子科技學院(BESTI)
實 驗 報 告
課程:Java 班級: 1353 姓名:郭皓 學號:20135327
成績: 指導教師:婁嘉鵬 實驗日期:2015.6.9
實驗密級: 預習程度: 實驗時間:15:30~18:00
儀器組次:20 必修/選修:選修 實驗序號:04
實驗名稱: 網路編程與安全
實驗目的與要求:
1.掌握Java網路編程的方法;
2.掌握Java安全編程的方法;
3.能綜合使用各種技術。
實驗儀器:
|
名稱 |
型號 |
數量 |
|
Lenovo |
V480 |
1 |
| Lenovo |
YOga 13 |
1 |
統計的PSP(Personal Software Process)時間
|
步驟 |
耗時(min) |
百分比 |
|
需求分析 |
10 |
4.17% |
|
設計 |
60 |
25% |
|
代碼實現 |
120 |
50% |
|
測試 |
30 |
12.5% |
|
分析總結 |
20 |
8.33%
|
一、 實驗內容與步驟
實驗人員:
用戶端 :20135327 郭皓
伺服器 :20135329 李海空 http://www.cnblogs.com/haikong/
實驗內容:
1 編寫網路通訊程式(基於TCP)
2 對通訊內容使用對稱DES密碼編譯演算法進行加密
3 使用非對稱演算法分發對稱式加密中使用的密鑰
4 對通訊內容進行摘要計算並驗證
5 其他安全措施
實驗步驟:
1.用戶端對資訊進行DES加密(使用RSA公開金鑰加密DES密鑰)
2.伺服器接受資訊並解密(使用RSA私密金鑰)
3.驗證資訊完整性
實驗代碼:
import java.math.*;
import java.net.*;
import java.security.Key;
import java.io.*;
import javax.crypto.Cipher;
public class Client {
public static void main(String srgs[]) {
try {
Socket socket = new Socket("172.30.113.2", 4421);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.print("請輸發送的資料:");
String s = stdin.readLine();
String cs = new SEnc().Enc(s);
System.out.println("發送到伺服器的密文為:" + cs);
String ck = new Enc_RSA().Enc(s);
System.out.println("發送到伺服器的加密秘鑰為:" + ck);
String result = DigestCalc.hash(s);
System.out.println("MD5:" + result);
out.println(ck);
out.println(cs);
out.println(result);
} catch (Exception e) {
System.out.println(e);
} finally {
}
}
}
實驗:
二、實驗中遇到的問題及其解決方案
1.發送經過DES加密後的密文時採用的是將其轉化為字串的方式,在這裡用戶端採用的是toString()函數,伺服器採用的是getBytes()函數,傳輸後的密文出現錯誤。最後進過討論使用了二進位轉十六進位輸出密文。代碼如下:
public static String bytesToHexString(byte[] src){
StringBuilder stringBuilder = new StringBuilder("");
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
2.兩台電腦一直無法聯通
在實驗室時我們起初是從寢室區域網路上用自己的IPv4地址,然後顯示連線逾時。
我們認為可能是兩台電腦沒有在同一個網路裡而不發連結成功,嘗試著用一台電腦串連網路然後wifi給另一台電腦使用,然後再次串連兩台電腦,終於連通成功了。
並不知道為什麼,可能是因為區域網路的原因吧!
Java第四次實驗報告