-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMain.java
More file actions
202 lines (169 loc) · 8.48 KB
/
Main.java
File metadata and controls
202 lines (169 loc) · 8.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
import java.io.*;
/**
* @author (fork) Matteo Bagnoletti Tini
* @version 1.1
* @since 1.0
* @see <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html">Documentazione Oracle Thread</a>
* @see <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html">Documentazione Oracle Runnable</a>
* @see <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">Documentazione Oracle File</a>
* @see <a href="https://docs.oracle.com/javase/8/docs/api/java/io/FileWriter.html">Documentazione Oracle FileWriter</a>
* @see <a href="https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html">Documentazione Oracle BufferedReader</a>
* @see <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStreamReader.html">Documentazione Oracle InputStreamReader</a>
* @see <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html">Documentazione Oracle IOException</a>
* GitHub: <a href="https://github.com/matbagnoletti/Encryption">Encryption</a>
*/
class Main {
public static void main(String[] args) {
Matrice matrice = new Matrice("");
/* creazione dei 4 thread (vermi) utilizzando istanze (vigenere*) della classe (Vigenere), la quale implementa Runnable */
Vigenere vigenere1 = new Vigenere(0, 13, 0, 13, matrice);
Thread thread1 = new Thread(vigenere1);
Vigenere vigenere2 = new Vigenere(13, 26, 0, 13, matrice);
Thread thread2 = new Thread(vigenere2);
Vigenere vigenere3 = new Vigenere(0, 13, 13, 26, matrice);
Thread thread3 = new Thread(vigenere3);
Vigenere vigenere4 = new Vigenere(13, 26, 13, 26, matrice);
Thread thread4 = new Thread(vigenere4);
/* ciascun verme inizia il riempimento della propria sezione di matrice */
thread1.start();
thread2.start();
thread3.start();
thread4.start();
/* al termine del riempimento viene stampata la matrice completa */
try{
thread1.join();
thread2.join();
thread3.join();
thread4.join();
} catch (InterruptedException ex){
System.err.println("Errore nell'attendere i vermi per il riempimento della tabella! La matrice mostrata potrebbe essere incompleta.");
} finally {
matrice.stampa();
}
/* creazione degli oggetti per la lettura da tastiera */
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(input);
/* menù cifratura e decifratura */
int scelta;
/* loop per la scelta del menù - v1.1 */
do{
try{
System.out.print("\n*** MENU' ***\n1) Cifrare\n2) Decifrare\n0) Exit\n> ");
scelta = Integer.parseInt(reader.readLine());
} catch (IOException ex){
System.err.println("Errore nell'inserimento della scelta nel menù!");
scelta = 0;
}
if (scelta == 1){
File fileC = null;
String idC = "";
/* richiedo l'username dell'utente per la creazione di un suo file di cifratura */
do {
if(fileC != null){
System.out.println("Attenzione! Lo username inserito non è utilizzabile");
}
try {
System.out.print("Inserisci uno username (deve essere univoco - serve alla creazione del file di cifratura): ");
idC = reader.readLine();
} catch (IOException ex) {
System.err.println("Errore nell'inserimento dell'id del file da cifrare");
}
/* verifico l'esistenza di un file dell'utente */
fileC = new File(idC);
} while (fileC.exists() && fileC.isFile());
/* creazione del file di cifratura */
fileC = new File(idC);
FileWriter writer = null;
try {
writer = new FileWriter(fileC);
} catch (IOException e) {
System.out.println("Errore nella creazione del file di cifratura!");
}
/* inserimento della parola chiave per la cifratura-decifratura */
try {
System.out.print("Inserisci la chiave di cifratura: ");
matrice.verme = reader.readLine();
matrice.verme = matrice.verme.toUpperCase();
} catch (IOException ex){
System.err.println("Errore nell'inserimento della chiave!");
}
/* inserimento del messaggio da cifrare */
String testoInChiaro = "";
try {
System.out.print("Inserisci il testo da cifrare: ");
testoInChiaro = reader.readLine();
} catch (IOException ex){
System.err.println("Errore nell'inserimento del testo!");
}
testoInChiaro = testoInChiaro.toUpperCase();
/* cifratura */
String testoCifrato;
try {
testoCifrato = matrice.cifra(testoInChiaro);
} catch (ArrayIndexOutOfBoundsException ex){
System.err.println("Errore! Il testo inserito contiene caratteri non cifrabili! L'operazione verrà annullata.\n");
testoCifrato = testoInChiaro;
}
/* salvataggio su File */
if(!testoCifrato.equals(testoInChiaro)){
if(writer != null){
try {
writer.write(testoCifrato);
} catch (IOException e) {
System.out.println("Errore nel salvataggio su File!");
}
try {
writer.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
} else {
System.err.println("Errore nel salvataggio su file!");
}
}
} else if (scelta == 2){
File fileD;
String idD = "";
/* richiedo l'username dell'utente per la ricerca del file da decifrare */
try {
System.out.print("Inserisci lo username del file da decifrare: ");
idD = reader.readLine();
} catch (IOException ex) {
System.err.println("Errore nell'inserimento dell'id del file da decifrare");
}
/* verifico l'esistenza del file richiesto */
fileD = new File(idD);
if(fileD.exists() && fileD.isFile()){
/* leggo il file */
StringBuilder testoCifrato = new StringBuilder();
try {
FileReader fileReader = new FileReader(fileD);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
testoCifrato.append(line);
}
bufferedReader.close();
} catch (IOException e) {
System.out.println("Errore nella lettura del file!");
}
/* inserimento della parola chiave per la cifratura-decifratura */
try {
System.out.print("Inserisci la chiave di decifratura: ");
matrice.verme = reader.readLine();
matrice.verme = matrice.verme.toUpperCase();
} catch (IOException ex){
System.err.println("Errore nell'inserimento della chiave!");
}
/* decifro il testo */
String testoInChiaro = matrice.deCifra(testoCifrato.toString());
System.out.println("Testo decifrato: " + testoInChiaro);
} else {
System.err.println("Errore! Il file richiesto non esiste!");
}
}
} while (scelta != 0);
/* terminazione del programma */
System.out.println("Esecuzione terminata!");
}
}