· 5 years ago · Mar 09, 2020, 10:28 PM
1import java.net.*;
2import java.io.*;
3import java.security.InvalidAlgorithmParameterException;
4import java.security.InvalidKeyException;
5import java.security.NoSuchAlgorithmException;
6import javax.crypto.*;
7import javax.crypto.spec.IvParameterSpec;
8import javax.crypto.spec.SecretKeySpec;
9
10public class Server{
11 public static void main(String args[]){
12 int number=0;
13 try{
14 int serverPort = 4567;
15 ServerSocket listenSocket = new ServerSocket(serverPort);
16 while(true) {
17 Socket clientSocket = listenSocket.accept();
18 new Connection(clientSocket,number);
19 number++;
20 }
21 } catch(IOException e) {
22 System.out.println("Listen:" + e.getMessage());
23 }
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 String data = in.readUTF();
48 writeFile("C:\\Users\\maria\\IdeaProjects\\AC1\\src\\input1.txt", data);
49
50 //key
51 KeyGenerator keyGen = KeyGenerator.getInstance("AES");
52 keyGen.init(128);
53 SecretKey secretKey = keyGen.generateKey();
54
55 //nonce
56 byte[] nonce={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
57 IvParameterSpec iv = new IvParameterSpec(nonce);
58
59 Cipher c = Cipher.getInstance("AES/CTR/NoPadding");
60 c.init(Cipher.ENCRYPT_MODE, secretKey, iv);
61 processFile(c, "C:\\Users\\maria\\IdeaProjects\\AC1\\src\\input1.txt", "C:\\Users\\maria\\IdeaProjects\\AC1\\src\\output1.txt");
62
63 c.init(Cipher.DECRYPT_MODE, secretKey, iv);
64 processFile(c, "C:\\Users\\maria\\IdeaProjects\\AC1\\src\\output1.txt", "C:\\Users\\maria\\IdeaProjects\\AC1\\src\\output2.txt");
65
66 //out.writeUTF("["+number+"]"+" "+data);
67 System.out.println("["+number+"]"+" "+data);
68 }
69 } catch (NoSuchPaddingException e) {
70 e.printStackTrace();
71 } catch (NoSuchAlgorithmException e) {
72 e.printStackTrace();
73 } catch (InvalidKeyException e) {
74 e.printStackTrace();
75 } catch (InvalidAlgorithmParameterException e) {
76 e.printStackTrace();
77 } catch (FileNotFoundException e) {
78 e.printStackTrace();
79 } catch (IOException e) {
80 e.printStackTrace();
81 }
82 }
83
84 public void writeFile(String inputFile, String data)
85 throws IOException {
86 FileOutputStream file = new FileOutputStream(inputFile);
87 file.write(data.getBytes());
88 }
89
90 static private void processFile(Cipher c,String inFile,String outFile) throws FileNotFoundException {
91 try (FileInputStream inputFile = new FileInputStream(inFile);
92 FileOutputStream outputFile = new FileOutputStream(outFile)) {
93 byte[] inputBuf = new byte[1024];
94 int len;
95 while ((len = inputFile.read(inputBuf)) != -1) {
96 byte[] outputBuf = c.update(inputBuf, 0, len);
97 if ( outputBuf != null ) outputFile.write(outputBuf);
98 }
99 byte[] outputBuf = c.doFinal();
100 if ( outputBuf != null ) outputFile.write(outputBuf);
101 } catch (IOException e) {
102 e.printStackTrace();
103 } catch (BadPaddingException e) {
104 e.printStackTrace();
105 } catch (IllegalBlockSizeException e) {
106 e.printStackTrace();
107 }
108 }
109}