資源簡介
作為通訊的雙方A和B,都已經分別和KDC擁有會話密鑰Ka和Kb,但A、B之間事先沒有保密通道,需要依賴KDC為它們的會話分配臨時密鑰Ks。在完成會話密鑰Ks的分配后,A利用Ks對特定文件(test-1.txt)進行加密,并發送給B;B利用Ks對密文進行解密,并對比解密后的明文信息同原來的文件是否一致。

代碼片段和文件信息
import?java.awt.BorderLayout;
import?java.awt.Container;
import?java.io.objectInputStream;
import?java.io.objectOutputStream;
import?java.net.ServerSocket;
import?java.net.Socket;
import?java.util.HashMap;
import?java.util.Random;
import?javax.crypto.SecretKey;
import?javax.swing.Jframe;
import?javax.swing.JScrollPane;
import?javax.swing.JTextArea;
/**
?*?密鑰分配中心
?*/
public?class?KDC?extends?Jframe{
?private?static?final?long?serialVersionUID?=?1L;
?
?ServerSocket?socket;
?Socket?connect;
?objectInputStream?in;
?objectOutputStream?out;
?
?//保存用戶與KDC共享的密鑰
?private?HashMap?keys?=?new?HashMap();
?private?JTextArea?textArea?=?new?JTextArea();
?
?public?KDC()?throws?Exception{
??super(“密鑰分配中心“);
??
??Container?cp?=?this.getContentPane();
??cp.add(new?JScrollPane(textArea)BorderLayout.CENTER);
??
??this.setSize(300300);
??this.setVisible(true);
??this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
??
??socket?=?new?ServerSocket(100005);//KDC的Socket初始化,采用端口10000
??
??Thread?t?=?new?Thread(new?KDCThread());
??t.start();//啟動線程,接收用戶的請求
?}
?
?//處理用戶的請求
?private?void?dealRequest(String?data)?throws?Exception{
??String[]?msg?=?data.split(““);
??textArea.append(msg[0]+“??請求與???“+msg[1]+“??通信\n本次業務標識符:?“+msg[2]+“??\n\n“);
??
??sendMsg(msg[0]msg[1]msg[2]);
?}
?
?/**
??*?KDC接收到用戶的會話密鑰請求后,應答對方
??*?
??*?@param?ida
??*????會話請求方ID
??*?@param?idb
??*????被請求會話方ID
??*?@param?random
??*????業務標識符
??*?@throws?Exception
??*/
?private?void?sendMsg(String?idaString?idbString?N1)?throws?Exception{
??String?ks?=?random();//產生一個隨機數用于生成密鑰
??
??String?strMsgToIda?=?ks+“/“+ida+“/“+idb+“/“+N1;//發送給會話請求方A的信息(未加密)
??String?strMsgToIdb?=?ks+““+ida;//發送給會話接收方B的信息(未加密)
??byte[]?byteMsgToIda?=?Provider.encrypt(keys.get(ida)strMsgToIda.getBytes());//發送給會話請求方A的信息(已加密)
??byte[]?byteMsgToIdb1?=?Provider.encrypt(keys.get(idb)strMsgToIdb.getBytes());//發送給會話接收方B的信息(用B密鑰加密,但未用A密鑰加密)
??byte[]?byteMsgToIdb?=?Provider.encrypt(keys.get(ida)byteMsgToIdb1);//發送給會話接收方B的信息(已用A的密鑰加密)
??send(byteMsgToIda);
??send(byteMsgToIdb);
??
??connect.close();//關閉連接
?}
?
?public?void?addClient(String?idSecretKey?SecretKey){
??keys.put(id?SecretKey);
?}
?
?public?void?send(byte[]?data)?throws?Exception{
??int?num?=?data.length;
??out.writeInt(num);//發送字節數
??out.flush();
??
??out.write(data);//發送數據
??out.flush();
?}
?
?private?String?random(){
??Random?r?=?new?Random();
??String?id?=?Math.abs(r.nextInt()%10000)+““;
??
??return?id;
?}
?
?//用于接收用戶請求的線程
?private?class?KDCThread?implements?Runnable{
??public?void?run()?{
???while(true){
????try?{
?????connect?=?socket.accept();//循環等待用戶請求
?????out?=?new?objectOutputStream(connect.getOutputStream());
?????in?=?new?objectInputStream(connect.getInputStream());
?????
?????//處理接收到的用戶請求
?????dealRequest(in.readUTF());
????}?catch?(Exception?e)?{
?????e.printStackTrace();
????}
??}
?}
?}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????379??2010-03-27?20:43??KDC\.project
?????文件???????3214??2010-03-27?20:47??KDC\src\KDC.java
?????文件???????2214??2010-03-27?20:46??KDC\src\Provider.java
?????文件???????6579??2010-03-27?20:57??KDC\src\User.java
?????文件????????297??2010-03-27?20:46??KDC\src\Test.java
?????文件???????7181??2010-03-27?20:57??KDC\bin\User.class
?????文件???????1161??2010-03-27?20:57??KDC\bin\User$1.class
?????文件????????975??2010-03-27?20:57??KDC\bin\User$SendThread.class
?????文件???????1543??2010-03-27?20:57??KDC\bin\User$Communicate.class
?????文件????????550??2010-03-27?20:47??KDC\bin\Test.class
?????文件???????2599??2010-03-27?20:47??KDC\bin\Provider.class
?????文件???????1386??2010-03-27?20:47??KDC\bin\KDC$KDCThread.class
?????文件???????3901??2010-03-27?20:47??KDC\bin\KDC.class
?????文件????????629??2010-03-27?20:43??KDC\.settings\org.eclipse.jdt.core.prefs
?????文件????????421??2010-03-27?20:47??KDC\.classpath
?????目錄??????????0??2010-03-27?20:43??KDC\src
?????目錄??????????0??2010-03-27?20:43??KDC\bin
?????目錄??????????0??2010-03-27?20:43??KDC\.settings
?????目錄??????????0??2010-03-27?20:43??KDC
-----------?---------??----------?-----??----
????????????????33029????????????????????19
- 上一篇:DVD租賃管理系統純Ecplise
- 下一篇:cropper裁剪支持頁面多個圖片裁剪
評論
共有 條評論