⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 assocket.java

📁 一个简单的实现Kerberos验证的程序
💻 JAVA
字号:
/**
 * AS服务器
 */
package src;

import java.io.*;
import java.net.*;
import java.security.*;

public class ASSocket {
	byte[] ID_TGS, TS_TGS, lifetime, ticket_TGS;
	private Socket clientSocket;
	private ServerSocket serverSocket;
	private ObjectInputStream in;
	private ObjectOutputStream out;
	private int port;
	
	public ASSocket(int port) {
		this.port = port;
		try {
			serverSocket = new ServerSocket(port);
			System.out.println("AS 服务器运行中.....");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public void start(){
		while (true) {
			try {
				clientSocket = serverSocket.accept();
				/**
				 * (1)C->AS: IDc || ADc || TS1
				 * (2)AS->C: Epub-c[IDtgs || TS2 || Lifttime1 || Tickettgs],
				 * Tickettgs = Epub-tgs[Kpub-c || IDc || ADc || IDtgs || TS2 || Lifetime1] 
				 */
				in = new ObjectInputStream(clientSocket.getInputStream());
				out = new ObjectOutputStream(clientSocket.getOutputStream());
				Object inObject = in.readObject();
				if(inObject instanceof C_AS){
					System.out.println("receive a C2AS/AS 获得了从客户端发来的消息");
					C_AS c_as = (C_AS)inObject;
					String IDc = c_as.getIDc();
					String ADc = c_as.getADc();
					long TS2 = Utils.getCurrentTime();
					
					
					byte[] IDc_byte = IDc.getBytes(Utils.UTF);
					byte[] ADc_byte = ADc.getBytes(Utils.UTF);
					byte[] IDtgs_byte = Utils.ID_TGS.getBytes(Utils.UTF);
					long lifeTime = Utils.LIFETIME;
					
					//生成Tickettgs
					AESCryptography aes = new AESCryptography();
					Object keyObjectAES = Utils.getKey(Utils.KEY_PATH, Utils.TGS_KEY + Utils.AES_POSTFIX);
					Key AESkey = (Key)keyObjectAES;
					byte[] IDc_Cipher_byte_tgs = aes.encrypt_decrypt(IDc_byte, AESkey, true);
					byte[] ADc_Cipher_byte_tgs = aes.encrypt_decrypt(ADc_byte, AESkey, true);
					byte[] IDtgs_Cipher_byte_tgs = aes.encrypt_decrypt(IDtgs_byte, AESkey, true);
					Ticket_tgs ticket = new Ticket_tgs(IDc_Cipher_byte_tgs, ADc_Cipher_byte_tgs, IDtgs_Cipher_byte_tgs, TS2, lifeTime);
					
					//生成AS->C
					RSACryptography rsa = new RSACryptography();
					Object keyObjectRSA = Utils.getKey(Utils.KEY_PATH, Utils.PUBLIC_CLIENT_KEY + Utils.RSA_POSTFIX);
					Key RSAkey = (Key)keyObjectRSA;
					byte[] IDtgs_Cipher_byte = rsa.encrypt_decrypt(IDtgs_byte, RSAkey, true);
					AS_C as_c = new AS_C(IDtgs_Cipher_byte, ticket, TS2, lifeTime);
					if(IDc.equals("test"))
						out.writeObject(as_c);
					else
						out.writeObject("false");		
				}else{
					System.out.println("as error");
					out.writeObject("as error");
				}
					
				
			} 
			catch (Exception e) {
				e.printStackTrace();
			}
			System.out.println("As上通过");
			System.out.println("As已经向客户端发送消息");
		}
	}
	
	
	public static  void main(String[] args){
		ASSocket as = new ASSocket(5000);
		as.start();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -