📄 assocket.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 + -