lunedì 6 ottobre 2008

Vigenere - Creazione di un sistema crittografico in Java

Ciò che vado a presentarvi è in realtà una scommessa, fatta con me stesso...

Dopo tanti anni di studio all'interno della terza università di Roma, nel campo dell'ingegneria informatica, e dopo tante umiliazioni, ho deciso di creare un sistema crittografico usando la programmazione orientata agli oggetti. Qualora ci fossi riuscito, avrei dimostrato a me stesso che i sistemi di valutazione usati all'interno della mia facoltà fossero del tutto errati!

Ed ecco qua ciò che sono riuscito a creare un un paio di mesi di lavoro saltuario.

Il sistema di crittografia creato si basa sul cifrario di Vigenere (vi posto il link di Wikipedia, senza rompervi troppo le scatole con la teoria).

Adesso passiamo al programma in sè... Il suo funzionamento è molto semplice. Basterà inserire il testo da cifrare o da decifrare, nello spazio in alto,



inserire la chiave di crittazione, fondamentale per la sua cifrazione e infine decidere l'operazione
da fare, se criptare il testo e decriptarlo.


Il programma è stato realizzato interamente in Java, con interfaccia grafica Swing. Il file è stato poi trasformato in .exe per renderlo facilmente eseguibile sui sistemi Windows.

Ci sono alcune precisazioni da fare riguardo l'uso del programma...
Per quanto riguarda i caratteri speciali (numeri, apostrofi, lettere accentate, punti) sono stati quasi tutti implementati e rimarranno tali, senza subire modifiche. Ma è sempre possibile che mi sia sfuggito qualche carattere.
Inoltre, e questo forse è il problema più grande, il cifrario non vi riconoscerà il fatto di andare a capo. O meglio, se scrivete il testo direttamente voi, da tastiera, il sistema andrà a capo automaticamente. Ma qualora venisse forzato (premendo in tasto invio), si rischia che esso non venga riconosciuto e quindi segnalarvi un errore.
Oltretutto, cosa superflua ma meglio specificare, la chiave di crittazione deve essere una parola, priva di spazi, di caratteri speciali e parole accentate.

Per scaricarvi il programma vi basterà cliccare qui e seguire le istruzioni di download.

P.S. Sono ben accetti suggerimenti e opinioni, sperando nel vostro buon senso!



Update Versione 1.0.1:
Ho modificato il codice del programma in modo da codificare anche i caratteri maiuscoli. Adesso, verranno automaticamente modificati in caratteri minuscoli, in modo da renderli utilizzabili per la crittazione. Il file nuovo è scaricabile all'indirizzo scritto nel post (l'ho soltanto sostituito).


Update Versione 1.1:
Aggiornamento del software alla versione 1.1. E' stato risolto un bug relativo alla mancanza di testo sia nella chiave che nel testo da cifrare, che mandava in crash il sistema. Errore mio, purtroppo. Oltretutto sono state apportate modifiche al codice per renderlo più leggibile (altra mia mancanza)... Il file è scaricabile da link scritto nella descrizione del software. Si tratta sempre di un .jar (niente più .exe) in modo che possa essere avviato da qualunque pc con Windows o Linux e da Mac.

5 commenti:

Giorgio ha detto...

e bravo il vecchio complimenti per lo swing ma un suggerimento ce l'ho. e se oltre a vigenere non implementi anche un cifrario di cesare?

Anonimo ha detto...

Bravo! Tre appunti

1) puoi rendere disponibile il programma come jar? non tutti hanno windows

2) ma perché decrittando una parola crittata non ottengo il risultato originario?
Es.
parola : Mela
seme : bcd
critto: mfna
decritto: mdja ( ?? )

non dovrei riottenere mela?

3) Ti suggerisco un parsing della stringa in input per gestire le eccezioni o le maiuscole : )

Comunque, carino!

Andrea ha detto...

Grazie per il bravo! :D

Avevo pensato a creare una versione utilizzabile sotto linux... Ma alla fine non l'ho mai fatto.

Cmq, il jar è scaricabile da qui:
http://www.megaupload.com/it/?d=A26AADNP

Ma non capisco il problema che hai...
Quale sarebbe la parola chiave?
Ad ogni modo, se nella casella del testo ci metti il testo cifrato, utilizzando la stessa chiave dovresti riottenere il testo in chiaro. O almeno a me così succede :D

Per il terzo punto, troppo modifiche ci sarebbero da apportare. Penso che controllando il jar vedrai che accozzaglia ho creato. Ad ogni modo, grazie per il suggerimento.

Anonimo ha detto...

Vediamo se l'hai fatto ad oggetti: posta il codice.

PS
attento all'italiano nel testo:
"Qualora ci fossi riuscito, avrei dimostrato a me stesso, che i sistemi di valutazione usati all'interno della mia facoltà fossero del tutto errati!"
virgole e tempi messi alla buona...

Andrea ha detto...

sono circa 7 classi. Ti interessano i sorgenti?

Per il testo, ho usato una virgola di troppo :D