vuoi
o PayPal
tutte le volte che vuoi
Il client nel nostro progetto è il primo che deve essere avviato (prima del server) siccome si aspetta dal server due chiavi e, n che utilizzerà per svolgere RSA. Dopo che gli sono arrivati i pacchetti, creiamo due attributi che prendono ciò che si trovava all'interno di essi; byteToLong è un metodo utilizzato per convertire i byte in long (descritto successivamente). Infine passiamo e ed n a due variabili di tipo BigInteger poiché la grandezza di essi potrebbe non bastare per essere tenuta in long dopodiché il risultato ottenuto da chiaveScelta (la nostra chiave di criptazione) elevata a e mod n viene salvata in cifraS dopodiché viene passata in un attributo long per poi essere inserita in un buffer utilizzando il metodo long to byte (metodo spiegato successivamente) per poi essere inviata al server.
SERVER
Nel server invece utilizziamo un array statico denominato numeriPrimi contenente i numeri primi da 7 a 109 (i numeri 1, 2, 3, 5 sono stati tolti).
perché il messaggio deve essere più piccolo della chiave e se vengono moltiplicati due di questi numeri c'è il rischio che non funzioni il programma.
I due attributi p e q prendono un numero qualsiasi all'interno dell'array numeriPrimi e si va a moltiplicare le due variabili e il risultato viene messo in n. Successivamente si calcola la chiave privata del server denominata b che calcola la moltiplicazione di p e q sottratti di 1. Inoltre viene creato l'attributo e che deve essere coprimo dell'attributo b ovvero deve avere come massimo comun divisore solo 1; per far si che questo avvenga abbiamo fatto un ciclo dove richiamiamo il metodo MCD per trovare il massimo comune divisore.
Attraverso la conversione da long a byte grazie al metodo LongToByte inseriamo l'attributo è in bufferNumeri per poi inviarlo al client, stessa cosa per l'attributo n. Quando il client spedisce al server la chiave simmetrica cifrata, la chiave simmetrica
```htmlviene messa nella variabile msgC tramite il metodo ByteToLong, inserita in un attributo di tipo BigInteger. Stessa cosa vale per la variabile n e per la variabile d (l'inverso di e nell'aritmetica finita di ordine b che viene utilizzata per decodificare msgC) che verranno utilizzati dopo per fare come nel client il modulo di big (variabile contente la chiave simmetrica cifrata).
METODO MCD
Il metodo MCD lo utilizziamo per fare in modo che l'attributo del server E e D abbiamo come mcd solo 1 per far ciò utilizziamo l'aritmetica di Euclide.
METODO LONGTOBYTE E BYTETOLONG
Questo è il metodo utilizzato per la conversione da byte a long e viceversa.
INTEGRITÀ
Con il termine integrità si intende la protezione dei dati e delle informazioni nei confronti delle modifiche del contenuto, accidentali (involontarie) oppure effettuate volontariamente da una terza parte, essendo compreso nell'alterazione anche il caso limite della generazione ex novo di dati.
```informazioni.Per far ciò abbiamo utilizzato l'algoritmo MD5 utilizzando la classe di java MessageDigest.
CLIENT
Nel client l'MD5 lo creiamo nel metodo leggiFile dove, creiamo un attributo di File che conterrà il file che verrà usato per l'upload. Successivamente creiamo un buffer di byte il quale sarà lungo la lunghezza del file più 16, la lunghezza dell'MD5 calcolata attraverso la classe MessageDigest. La stessa cosa vale per il server nel caso in cui si richiede il download dal client, se no si trova nel metodo writeFile nel caso il client richieda l'upload.
SERVER
Nel server viene inoltre fatto il controllo per verificare che l'MD5 calcolato sia identico a quello ricevuto dal client. Nel caso fossero diversi il file non viene né scaricato né caricato.
WIRESHARK
La prima immagine mostra la crittografia di cesare mentre le successive 3 mostrano l'autenticazione con RSA.