· 5 years ago · Mar 09, 2020, 12:50 AM
1import java.net.*;
2import java.io.*;
3import java.security.*;
4import javax.crypto.*;
5import java.util.*;
6import javax.crypto.spec.IvParameterSpec;
7
8
9
10public class Server{
11 public static void main(String args[]){
12
13 int number=0;
14 try{
15 int serverPort = 4567;
16 ServerSocket listenSocket = new ServerSocket(serverPort);
17 while(true) {
18 Socket clientSocket = listenSocket.accept();
19 new Connection(clientSocket,number);
20 number++;
21 }
22 }catch(IOException e)
23 {System.out.println("Listen:" + e.getMessage());}
24 }
25}
26
27class Connection extends Thread {
28 DataInputStream in;
29 DataOutputStream out;
30 Socket clientSocket;
31 int number;
32
33 public Connection (Socket aClientSocket,int clientNumber) {
34
35 try{
36 number=clientNumber;
37 clientSocket = aClientSocket;
38 in = new DataInputStream(clientSocket.getInputStream());
39 out = new DataOutputStream(clientSocket.getOutputStream());
40 this.start();
41 }catch(IOException e){System.out.println("Connection:" + e.getMessage());}
42 }
43
44 public void run(){
45 try{
46 while(true){
47
48 String data = in.readUTF();
49
50 try {
51
52 // Key
53 KeyGenerator keyGen = KeyGenerator.getInstance("AES");
54 keyGen.init(128);
55 SecretKey secretKey = keyGen.generateKey();
56
57
58
59 // NONCE
60 // tem de ser gerado
61 byte[] nonce={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
62 IvParameterSpec iv = new IvParameterSpec(nonce);
63
64
65 Cipher c = Cipher.getInstance("AES/CTR/NoPadding"); // tem de conter /PKCS5Padding se nao da erro
66 byte[] m ={'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a'};
67 System.out.println("bytes originais : "+Arrays.toString(m));
68
69 // cifra
70 c.init(Cipher.ENCRYPT_MODE,secretKey,iv);
71 byte[] cifrados=c.update(m);
72 c.doFinal();
73 System.out.println("bytes cifrados : "+Arrays.toString(cifrados));
74
75
76 //decifra
77 c.init(Cipher.DECRYPT_MODE,secretKey,iv);
78 byte[] decifrados=c.update(cifrados);
79 c.doFinal();
80 System.out.println("bytes decifrados : "+ Arrays.toString(decifrados));
81
82
83
84 } catch (NoSuchAlgorithmException e) {
85 e.printStackTrace();
86 } catch (NoSuchPaddingException e) {
87 e.printStackTrace();
88 } catch (InvalidKeyException e) {
89 System.out.println("Failed init");
90 } catch (BadPaddingException e) {
91 System.out.println("Failed doFinal");
92 } catch (IllegalBlockSizeException e) {
93 e.printStackTrace();
94 } catch (InvalidAlgorithmParameterException e) {
95 e.printStackTrace();
96 }
97
98 System.out.println("["+number+"]"+" "+data);
99 }
100 }catch(EOFException e){System.out.println("=["+number+"]=");
101 }catch(IOException e){System.out.println("IO:" + e);}
102 }
103}