· 5 years ago · Mar 09, 2020, 10:18 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 //key
70 byte [] key = {1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4};
71 SecretKey secretKey = new SecretKeySpec(key, 0, secretKey.length, "AES");
72
73 //nonce
74 byte[] nonce={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
75 IvParameterSpec iv = new IvParameterSpec(nonce);
76
77 Cipher c = Cipher.getInstance("AES/CTR/NoPadding");
78 c.init(Cipher.DECRYPT_MODE, secretKey, iv);
79 processFile(c);
80 }
81 } catch (NoSuchPaddingException e) {
82 e.printStackTrace();
83 } catch (NoSuchAlgorithmException e) {
84 e.printStackTrace();
85 } catch (InvalidKeyException e) {
86 e.printStackTrace();
87 } catch (InvalidAlgorithmParameterException e) {
88 e.printStackTrace();
89 }
90 }
91
92 public void writeFile(String inputFile, String data)
93 throws IOException {
94 FileOutputStream file = new FileOutputStream(inputFile);
95 file.write(data.getBytes());
96 }
97
98 /*static private void processFile(Cipher c,String inFile,String outFile) throws FileNotFoundException {
99 try (FileInputStream inputFile = new FileInputStream(inFile);
100 FileOutputStream outputFile = new FileOutputStream(outFile)) {
101 byte[] inputBuf = new byte[1024];
102 int len;
103 while ((len = inputFile.read(inputBuf)) != -1) {
104 byte[] outputBuf = c.update(inputBuf, 0, len);
105 if ( outputBuf != null ) outputFile.write(outputBuf);
106 }
107 byte[] outputBuf = c.doFinal();
108 if ( outputBuf != null ) outputFile.write(outputBuf);
109 } catch (IOException e) {
110 e.printStackTrace();
111 } catch (BadPaddingException e) {
112 e.printStackTrace();
113 } catch (IllegalBlockSizeException e) {
114 e.printStackTrace();
115 }
116 }*/
117
118 static private void processFile(Cipher c){
119 try (FileInputStream inputFile = new FileInputStream("C:\\Users\\maria\\IdeaProjects\\AC1\\src\\encrypt.txt");
120 CipherInputStream cis = new CipherInputStream(inputFile, c);
121 FileOutputStream outputFile = new FileOutputStream("C:\\Users\\maria\\IdeaProjects\\AC1\\src\\decrypt.txt");
122 CipherOutputStream cos = new CipherOutputStream(outputFile, c)) {
123 byte[] inputBuf = new byte[1024];
124 int aux;
125 while ((aux = cis.read(inputBuf)) != -1) {
126 System.out.print((char) aux);
127
128 //byte[] outputBuf = c.update(inputBuf, 0, aux);
129 //if ( outputBuf != null ) outputFile.write(outputBuf);
130 }
131
132 /*while((text=System.in.read())!=-1) {
133 cos.write((byte)text);
134 cos.write("\n".getBytes());
135 cos.write("\\\\\\\\\\\\".getBytes());
136 cos.flush();
137 }*/
138
139 byte[] outputBuf = c.doFinal();
140 if ( outputBuf != null ) outputFile.write(outputBuf);
141 } catch (IOException e) {
142 e.printStackTrace();
143 } catch (BadPaddingException e) {
144 e.printStackTrace();
145 } catch (IllegalBlockSizeException e) {
146 e.printStackTrace();
147 }
148 }
149}