https://github.com/enricoong/Chat
Progetto annuale Java con Battistelli Giovanni, per professor D. Giachetto.
https://github.com/enricoong/Chat
client cryptography database java maven rsa server
Last synced: 11 months ago
JSON representation
Progetto annuale Java con Battistelli Giovanni, per professor D. Giachetto.
- Host: GitHub
- URL: https://github.com/enricoong/Chat
- Owner: EnryX72
- Created: 2024-11-05T11:29:34.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-11-22T11:16:44.000Z (over 1 year ago)
- Last Synced: 2024-11-22T12:22:53.199Z (over 1 year ago)
- Topics: client, cryptography, database, java, maven, rsa, server
- Language: Java
- Homepage:
- Size: 15.6 KB
- Stars: 1
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Comunicazione Chat-Server
Un sistema di chat client-server sicuro implementato in Java.
*Autori: Giovanni Battistelli - Enrico Negretto*
## Panoramica
Questo progetto implementa un sistema di comunicazione client-server sicuro utilizzando Java, con focus particolare sulla sicurezza e sulla gestione efficiente delle connessioni multiple.
## Requisiti
- Java Development Kit (JDK) 8+
- Maven per la gestione delle dipendenze
## Scelta Tecnologica e Motivazioni
La scelta di Java come linguaggio di programmazione è stata guidata da diverse caratteristiche chiave:
- Affidabilità e sicurezza integrate
- Eccellente gestione della concorrenza
- Robusto supporto per la crittografia
- Ricco ecosistema di librerie
- Gestione efficiente delle connessioni multiple
## Architettura del Sistema
### Design Generale
Il sistema utilizza un'architettura client-server con gestione centralizzata delle connessioni. Il server implementa un modello multithread, dove ogni client viene gestito da un thread dedicato, permettendo l'elaborazione parallela delle richieste senza blocchi reciproci.
### Componenti Server
Il server gestisce tre funzioni principali:
1. Accettazione delle connessioni in entrata
2. Gestione indipendente della comunicazione
3. Elaborazione e risposta ai messaggi
### Componenti Client
Il client si occupa di:
- Stabilire e mantenere la connessione con il server
- Implementare la crittografia per la protezione dei dati
- Gestire l'invio e la ricezione di messaggi e/o file
## Implementazione Tecnica
### Librerie Utilizzate
Il progetto fa uso delle seguenti librerie Java:
- `java.net.Socket` e `java.net.ServerSocket` per le connessioni TCP
- `javax.crypto` per la crittografia AES
- `Log4j` per logging
### Protocollo di Comunicazione e Sicurezza
La sicurezza è implementata attraverso diversi livelli:
1. Protocollo base:
- Comunicazione basata su TCP per affidabilità e gestione errori
2. Misure di sicurezza:
- Crittografia AES-GCM con chiave a 32 byte
- Protocollo Diffie-Hellman per lo scambio sicuro delle chiavi
- Derivazione della chiave AES dalla chiave segreta condivisa
## Funzionalità
### Core Features
- Connessione stabile e affidabile client-server
- Sistema di messaggistica con crittografia
- Logging avanzato tramite Log4j
- Gestione concorrente delle connessioni multiple
### Roadmap Futura
Il progetto prevede l'implementazione delle seguenti funzionalità:
- Sistema di trasferimento file
- Interfaccia grafica utente
- Sistema di gestione utenti con database SQL
- Gestione dei permessi utente