Crea l'aplicació FileEncryption que permeta crear, llegir i escriure en fitxers
encriptats mitjançant l'algorisme AES. L'aplicació ha de mostrar el menú següent i permetre a la
persona usuària realitzar les accions indicades:
Benvingut a FileEncryption:
1) Escriure un fitxer
2) Llegir un fitxer
0) Eixir.
L'acció Eixir acaba el programa.
El codi ha d'estar ben estructurat en mètodes i classes.
La persona usuària indica la ruta del fitxer on vol guardar la informació i el programa
comprova si el fitxer existeix. Si existeix, el programa demana confirmació per sobreescriure'l
i, si no es confirma, torna al menú principal.
A continuació, el programa demana una contrasenya i crea una SecretKey a partir d'ella. Després,
demana que s'escriga per pantalla tota la informació que es vol guardar en el fitxer, i deixa de
demanar-la quan s'escriu una línia amb el contingut \exit. Finalment, encripta tot el contingut
i el guarda en el fitxer especificat.
La persona usuària indica la ruta del fitxer que vol llegir i el programa comprova si el fitxer
existeix. Si no existeix, mostra un missatge d'error i torna al menú principal.
A continuació, el programa demana una contrasenya, crea una SecretKey a partir d'ella i intenta
desencriptar el fitxer. Si la desencriptació ha sigut satisfactòria, mostra per pantalla el
contingut del fitxer desencriptat. En cas contrari (per exemple, perquè la contrasenya no és
l'adequada o el fitxer no estava encriptat), mostra un missatge d'error.
Adapta el codi de l'aplicació de l' Exercici: Chat perquè utilitze SSLSocket.
Codi de l'exercici Chat solucionat
Client:
ChatClient.java
packageud3.exercises.chat.client;importjava.io.IOException;importjava.io.PrintWriter;importjava.net.Socket;importjava.util.Scanner;publicclassChatClient{privatefinalSocketsocket;privatefinalChatClientListenerlistener;privatefinalScannerscanner;privatefinalPrintWriterout;publicChatClient(Stringhost,intport)throwsIOException{this.scanner=newScanner(System.in);this.socket=newSocket(host,port);this.out=newPrintWriter(socket.getOutputStream(),true);this.listener=newChatClientListener(socket.getInputStream());}publicvoididentify(){System.out.print("Introdueix el teu nom: ");Stringline=scanner.nextLine();out.println(line);listener.start();}publicvoidchat()throwsIOException{System.out.println("Acabes d'entrar al chat.");System.out.println("Per exir, escriu \"/exit\".");Stringline;while(!(line=scanner.nextLine()).equals("/exit")&&this.socket.isConnected()){out.println(line);}close();}publicvoidclose(){try{socket.close();listener.interrupt();}catch(IOExceptione){thrownewRuntimeException(e);}}publicstaticvoidmain(String[]args){System.out.println("Connectant-se amb el servidor...");try{ChatClientchat=newChatClient("localhost",1234);chat.identify();chat.chat();}catch(IOExceptione){System.err.println("Error connectant-se amb el servidor.");}}}
packageud3.exercises.chat.server;importjava.io.IOException;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.ArrayList;importjava.util.List;importjava.util.Scanner;publicclassChatServerextendsThread{ServerSocketserver;List<ChatServerHandler>clients;booleanrunning;publicChatServer(intport)throwsIOException{server=newServerSocket(port);clients=newArrayList<>();running=true;}publicvoidclose(){running=false;this.interrupt();}publicsynchronizedvoidremoveClient(ChatServerHandlerclient){clients.remove(client);}publicvoidsendMessage(Stringmsg){for(ChatServerHandlerclient:clients){client.sendMessage(msg);}}publicvoidsendMessage(Stringalias,Stringmsg){clients.stream().filter(client->!client.getNom().equals(alias)).forEach(client->client.sendMessage(msg));}@Overridepublicvoidrun(){while(running){try{Socketclient=server.accept();ChatServerHandlerhandler=newChatServerHandler(client,this);clients.add(handler);handler.start();System.out.println("Nova connexió acceptada.");}catch(IOExceptione){System.err.println("Error while accepting new connection");System.err.println(e.getMessage());}}}publicstaticvoidmain(String[]args){try{Scannerscanner=newScanner(System.in);ChatServerserver=newChatServer(1234);server.start();scanner.nextLine();server.close();}catch(IOExceptione){thrownewRuntimeException(e);}}}
ChatServerHandler.java
packageud3.exercises.chat.server;importjava.io.*;importjava.net.Socket;publicclassChatServerHandlerextendsThread{privatefinalSocketsocket;privatefinalChatServerserver;privatefinalPrintWriterout;privatefinalBufferedReaderin;privateStringnom;publicChatServerHandler(Socketsocket,ChatServerserver)throwsIOException{this.socket=socket;this.server=server;this.in=newBufferedReader(newInputStreamReader(socket.getInputStream()));this.out=newPrintWriter(socket.getOutputStream(),true);}publicStringgetNom(){returnnom;}publicvoidsetNom(Stringnom){this.nom=nom;}publicvoidsendMessage(Stringmessage){out.println(message);}@Overridepublicvoidrun(){try{Stringnom=in.readLine();setNom(nom);System.out.printf("%s s'ha identificat.\n",getNom());// Quan un client es desconecta, l'operació readLine() retorna nullStringmessage;while((message=in.readLine())!=null){StringmessageWithName=String.format("%s: %s",getNom(),message);System.out.println(messageWithName);server.sendMessage(messageWithName);}System.out.printf("%s has disconnected.\n",getNom());socket.close();}catch(IOExceptione){System.err.println(e.getMessage());}finally{server.removeClient(this);}}}
Cal generar els elements següents:
KeyStore de ChatServer: guarda-la en el fitxer files/ud4/chat/chat-server.jks.
Indica l'ordre utilitzada com a comentari en el moment que es cree el SSLServerSocket en la
classe ChatServer. El certificat ha de tindre les dades següents:
Camp
Valor
Àlies
chat-server
CN
ChatServer
OU
PSP-DAM2S
O
CIPFP Mislata
L
Mislata
ST
València
C
ES
La informació del certificat s'ha de mostrar per terminal quan s'inicie el servidor.
TrustStore de ChatClient: guarda-la en el fitxer files/ud4/chat/chat-client.jks.
Indica l'ordre utilitzada com a comentari en el moment que es cree el SSLSocket en la
classe ChatClient. Cal importar-hi el certificat del servidor generat anteriorment.
📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent
a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.